可能重复:
如何在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的测试检测器和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
。问题是,如果其中一个失败了,我就看不到其余的失败,因为它们也被分组成一个测试,当断言失败时中止。
我认为解决这个问题的方法是为每个测试用例创建一个(动态)函数,也许有更好的方法?