Как написать тестовый набор для носа

Если я хочу написать модульный тест, я просто добавляю файл в свой test/ подкаталог с моим наследием тестового класса от unittest.TestCase,

Теперь я хочу использовать такой шаблон для набора тестов: у меня есть файл Python в test/ с классом (расширение unittest.TestSuite), который читает файл и генерирует тест из него. У меня уже есть код для разбора файла и создания TestCase из них.

Но нос не обнаруживает этот класс. Как мне узнать об этом файле и сгенерировать из него тесты?

1 ответ

Решение

Вы не указываете версию Python, которую вы используете. С Python 2.7+ вы можете определить load_tests функция в вашем модуле, которая будет вызываться для создания TestSuite для модуля.

Однако, нос игнорирует протокол load_tests. Если у вас есть nose2, он имеет плагин для протокола нагрузочных тестов.

В противном случае вы создаете пустую TestCase и заполнить сгенерированными тестовыми функциями. Например:

import unittest

data = ["a", "b", "c"] # or from whatever source you want

class GeneratedTests(unittest.TestCase):

    def setUp(self):
        self.correct = "b"

def setup_module():
    for i, d in enumerate(data):
        test_driver = create_driver(d)
        name ="test_generated{}".format(i)
        setattr(GeneratedTests, name, test_driver)

def create_driver(d):
    def test_driver(self):
        self.assertEqual(d, self.correct)
    return test_driver

setup_module()

Последний способ сделать это - использовать контекстный менеджер подтестов. Это доступно только в версии 3.4+. Тем не менее, вы можете найти замену бедного человека здесь. Надеюсь, это поможет вам структурировать сгенерированные тесты в более удобочитаемой форме.

Другие вопросы по тегам