我们这样做是为了在unittest框架内运行实际上是集成(回归)测试(实际上是一种内部定制,它给我们带来了巨大的好处,比如在一组机器上并行运行测试等,等等——定制的巨大附加值就是为什么我们如此热衷于使用unittest框架)。在
每个测试都在一个文件中表示(在该测试中使用的参数,后跟预期结果)。我们的integration_测试从一个目录中读取所有这样的文件,解析每个文件,然后调用:def addtestmethod(testcase, uut, testname, parameters, expresults):
def testmethod(self):
results = uut(parameters)
self.assertEqual(expresults, results)
testmethod.__name__ = testname
setattr(testcase, testname, testmethod)
我们从一个空的测试用例类开始:
^{pr2}$
然后在一个循环中调用addtestmethod(IntegrationTest, ...,在这个循环中,我们读取所有相关文件并对其进行解析以获得testname、参数和expresults。在
最后,我们调用内部专门的测试运行程序来完成繁重的工作(将测试分发到集群中可用的机器上,收集结果等)。我们不想重新发明那个丰富的增值轮子,所以我们要根据需要制作一个与典型的“手工编码”非常接近的测试用例,以“愚弄”测试运行人员为我们工作;-)。在
除非您有特定的理由(优秀的测试运行人员等)使用unittest的方法来实现(集成?)测试,你可能会发现你的生活更简单,用不同的方法。然而,这一个是相当可行的,我们对它的结果非常满意(主要包括快速运行的大型集成/回归测试套件!)!-). 在