我有一些测试数据,想为每个项目创建一个单元测试.我的第一个想法是这样做:
import unittest
l = [["foo", "a", "a",], ["bar", "a", "b"], ["lee", "b", "b"]]
class TestSequence(unittest.TestCase):
def testsample(self):
for name, a,b in l:
print "test", name
self.assertEqual(a,b)
if __name__ == '__main__':
unittest.main()
Run Code Online (Sandbox Code Playgroud)
这样做的缺点是它在一次测试中处理所有数据.我想在运行中为每个项目生成一个测试.有什么建议?
可能重复:
如何在python中生成动态(参数化)单元测试?
我有一个测试函数under_test,和一组预期的输入/输出对:
[
(2, 332),
(234, 99213),
(9, 3),
# ...
]
Run Code Online (Sandbox Code Playgroud)
我希望这些输入/输出对中的每一个都能用自己的test_*方法进行测试.那可能吗?
这是我想要的,但强制每个输入/输出对进入一个测试:
class TestPreReqs(unittest.TestCase):
def setUp(self):
self.expected_pairs = [(23, 55), (4, 32)]
def test_expected(self):
for exp in self.expected_pairs:
self.assertEqual(under_test(exp[0]), exp[1])
if __name__ == '__main__':
unittest.main()
Run Code Online (Sandbox Code Playgroud)
(另外,我真的想把这个定义放进self.expected_pairs去setUp吗?)
更新:尝试doublep的建议:
class TestPreReqs(unittest.TestCase):
def setUp(self):
expected_pairs = [
(2, 3),
(42, 11),
(3, None),
(31, 99),
]
for k, pair in expected_pairs:
setattr(TestPreReqs, 'test_expected_%d' % k, create_test(pair))
def create_test (pair): …Run Code Online (Sandbox Code Playgroud)