相关疑难解决方法(0)

你如何在python中生成动态(参数化)单元测试?

我有一些测试数据,想为每个项目创建一个单元测试.我的第一个想法是这样做:

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 unit-testing parameterized-unit-test

211
推荐指数
10
解决办法
8万
查看次数

Python unittest:以编程方式生成多个测试?

可能重复:
如何在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_pairssetUp吗?)

更新:尝试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)

python tdd unit-testing

46
推荐指数
5
解决办法
3万
查看次数