Возможный дубликат:
Как создать динамические (параметризованные) модульные тесты в python?
Есть ли способ динамически создавать тестовые примеры unittest
? Я пробовал следующее.
class test_filenames(unittest.TestCase):
def setUp(self):
for category, testcases in files.items():
for testindex, curtest in enumerate(testcases):
def thetest():
parser = FileParser(curtest['input'])
theep = parser.parse()
self.assertEquals(theep.episodenumber, curtest['episodenumber'])
setattr(self, 'test_%s_%02d' % (category, testindex), thetest)
.., который корректно создает все методы (они отображаются в dir()
и являются вызываемыми), но unittest test detector, или nosetest
выполняет их ( "Ran 0 tests in..." )
Так как я могу задавать неправильный вопрос - чего я пытаюсь достичь:
У меня есть файл, содержащий тестовые данные, список входных имен файлов и ожидаемые данные (упрощенные до episodenumber
в приведенном выше коде), хранящиеся в словаре Python. Ключ - это категория, значение представляет собой список тестовых примеров, например.
test_cases = {}
test_cases['example_1'] = [
{'input': 'test.01',
'episodenumber': 1},
{'input': 'test.02',
'episodenumber': 2}
]
test_cases['example_2'] = [
{'input': 'another.123',
'episodenumber': 123},
{'input': 'test.e42',
'episodenumber': 32}
]
В настоящее время я просто перебираю все данные, вызываю self.assertEquals
для каждого теста. Проблема в том, что если один из них терпит неудачу, я не вижу остальных сбоев, поскольку они также сгруппированы в один тест, который прерывается, когда утверждение терпит неудачу.
Кстати, я думал, будет (динамически) создавать функцию для каждого тестового примера, возможно, есть лучший способ?