Pyunit с переменным количеством тестов
-
01-10-2019 - |
Вопрос
То, что я хотел бы сделать, создает папку, где люди могут поместить в файл для тестирования, и 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])]
...