gpt4 book ai didi

Python的unittest和动态创建测试用例

转载 作者:IT老高 更新时间:2023-10-28 20:32:44 24 4
gpt4 key购买 nike

Possible Duplicate:
How do you generate dynamic (parameterized) unit tests in 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 个测试在 ...")

因为我可能问错了问题 - 我想要达到的目标:

我有一个文件,其中包含测试数据、输入文件名列表和预期数据(在上面的代码中简化为 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。问题是,如果一个失败,我看不到其余的失败,因为它们也被分组到一个测试中,当断言失败时会中止。

我认为解决这个问题的方法是(动态地)为每个测试用例创建一个函数,也许有更好的方法?

最佳答案

在以下解决方案中,类 Tests包含辅助方法 check并且没有静态定义的测试用例。然后,为了动态添加测试用例,我使用 setattr在类中定义函数。在以下示例中,我生成测试用例 test_<i>_<j> i 和 j 分别跨越 [1,3] 和 [2,5],它们使用辅助方法 check i 和 j 的值不同。

class Tests(unittest.TestCase):
def check(self, i, j):
self.assertNotEquals(0, i-j)



for i in xrange(1, 4):
for j in xrange(2, 6):
def ch(i, j):
return lambda self: self.check(i, j)
setattr(Tests, "test_%r_%r" % (i, j), ch(i, j))

关于Python的unittest和动态创建测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1193909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com