Вопрос

То, что я хотел бы сделать, создает папку, где люди могут поместить в файл для тестирования, и Pyunit автоматически расширяется, чтобы запустить тест как отдельный тест. В настоящее время я делаю:

class TestName(unittest.testcase):
    def setUp(self):
        for file in os.listdir(DIRECTORY):
            # Setup Tests

    def test_comparison(self):
        for file in os.listdir(DIRECTORY):
            # Run the tests

def suite():
    return unittest.TestSuite([
unittest.TestLoader().loadTestsFromTestCase(TestName),
])

if __name__ == "__main__":
    unittest.TextTestRunner(verbosity=2).run(suite())

Очевидно, что есть много проблем с этим, например, если какой-либо тест терпит неудачу, все это не удается и т. Д. И т. Д. То, что я хотел бы сделать, установлен Pyunit так, чтобы он запустил тест (или тестовый случай) для Каждый файл, который помещен в каталог. Теперь, что я думаю, что я могу сделать, это создать список, перечисленные выше, только с двумя методами, но для того, чтобы сделать это успешно, мне придется добавить в контекстный параметр, например:

def setUp(self, filepath):
    # Do stuff

Тогда я мог бы поставить цикл в основной кусок кода и запустить такие тесты:

def suite():
    return unittest.TestSuite([
unittest.TestLoader().loadTestsFromTestCase(TestName, file),
])

if __name__ == "__main__":
    for file in DIRECTORY:
        unittest.TextTestRunner(verbosity=2).run(suite(file))

Но я не уверен, как это сделать без почти переписывания дыры Unittest.testcase () класс. Есть ли способ, которым я мог сделать это, или есть ли другой способ, которым я могу получить динамически расширение набора тестов / тестовых случаев в зависимости от того, сколько файлов в папке? Спасибо.

Это было полезно?

Решение

Вы могли бы использовать нос Поддержка для Тестовые генераторы. Отказ Это будет выглядеть что-то подобное:

def test_comparison():
    for file in os.listdir(DIRECTORY):
        yield run_cmp_test, file

def run_cmp_test(file):
    # Run the tests

В качестве альтернативы вы могли бы также Funcargs в пиатесте.

Другие советы

Хорошо, я думаю, что нашел ответ на мой вопрос. Я бы сказал, что я использую глобальные пространства имен, но по какой-то причине мои обычные знания пространств имен упали на его лице.

class TestImage(unittest.TestCase)
    pass #Do stuff, as well as using the filename variable

def suite():
    return unittest.TestSuite([
unittest.TestLoader().loadTestsFromTestCase(TestImage),
])

if __name__ == "__main__":
    for filename in os.listdir(sys.path[0]):
        unittest.TextTestRunner(verbosity=2).run(suite())

Это запускает тестовый случай для каждого имени файла в каталоге. (и имя папки). Хотя я понятия не имею, почему я могу использовать имя файла в Unittest Class. Должно быть, что связано с тем, как эти макросы загружаются и запускают класс.

Вы можете сделать это с testscenarios., Модуль, что-то вроде этого:

class MyTest(unittest.TestCase):

    scenarios = [os.listdir(sys.path[0])]

    ...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top