我有多个非常相似的类的程序:如何单元测试多个类似的类
class BlackBox1():
def calc(self, a, b):
return a + b
class BlackBox2():
def calc(self, a, b):
return a * b
...
现在我想要写所有这些类单元测试。当然,我可以为每个Blackbox编写单独的测试。无论如何,因为每个黑盒具有完全相同的方法calc(a, b)
进行测试,我在想,如果有像一个“最佳实践”,自动给类和预期结果的抽象测试框架,像
import unittest
class TestAbstractBox(unittest.TestCase):
def setUp(self):
self.box = blackbox()
self.param_a = a
self.param_b = b
self.expected_result = result
def test_calc_method(self):
real_result = self.box.calc(self.param_a, self.param_b)
self.assertEqual(real_result, self.expected_result,
"{0} gives wrong result".format(self.box.__class__))
TAbstractTest = unittest.defaultTestLoader.loadTestsFromTestCase(TestAbstractBox)
有没有办法将{"blackbox": Blackbox1, "a": 3, "b": 5, "result": 8}
和{"blackbox": Blackbox2, "a": 4, "b": 7, "result": 28}
传递给TestAbstractBox类,使其没有多次相同的代码,但是有一个简单的方法来测试新的Blackboxes?
如何更好地仅仅在'setUp'中保存一个字符串数组?它只会让你的测试更加复杂。 – freakish 2013-04-05 06:57:02
只需说出最重要的一些:如果需要对一些黑匣子进行额外测试,可以很容易地将它们添加到课程中,如果我有多个测试,那么您的答案每次都需要一个for循环,我只看到第一个在test_calc_method中失败测试(所以如果多个框被破坏,我只能一步一步得到它们)。由于这是一个框架,其他人可以添加更多的黑盒,我可以给他们一个简单的方法来测试他们的盒子。我也喜欢你的榜样,但就我的情况而言,这样做效果更好,看起来更客观。 – 2013-04-05 07:04:48
当然,无论你更适合你。 – freakish 2013-04-05 08:13:57