Python 中的测试框架
2007-03-30 12:35:07 来源:WEB开发网使用 unittest 为较简单的 doctest 方式增添了相当多的能力。我们可以将我们的测试分为几个类,每一个类都继承自 unittest.TestCase 。在每一个测试类内部,每一个名称以“.test”开始的方法都被认为是另一个测试。为 ExpatTest 定义的两个额外的类很有趣:在每次使用类执行测试前运行 .setUp() ,测试结束时运行 .tearDown() (不管测试是成功、失败还是出现错误)。在我们上面的例子中,我们为专用的 expat_kwargs 字典做了一点簿记以确保每个测试独立地运行。
顺便提一下,失败(failure)和错误(error)之间的区别很重要。一个测试可能会因为一些具体的断言无效而失败(断言方法或者以“.fail”开头,或者以“.assert”开头)。在某种意义上,失败是期望中的 -- 最起码从某种意义上我们已经具体分析过。另一方面,错误是意外的问题 -- 因为我们事先不知道哪里会出错,我们需要分析实际测试运行中的回溯来诊断这种问题。不过,我们可以设计让失败给出诊断错误的提示。例如,如果 Prerequisite.haveFiles() 失败,将在一些 TestExpat 测试中出现错误;如果前者是成功的,您将不得不到其他地方去查找错误的根源。
在 unittest.TestCase 的继承类中,具体的测试方法中可能会包括一些 .assert...() 或者 .fail...() 方法,但也可能只是具有一系列我们相信应该会成功执行的动作。如果测试方法没有按预期运行,我们将得到一个错误(以及描述这个错误的回溯)。
test_expat.py 中的 _main_ 程序块也值得察看。在最简单的情况下,我们可以只使用 unittest.main() 来运行测试用例,这将断定哪些需要运行。使用这种方式时, unittest 模块将接受一个 -v 选项以给出更详细的输出。根据指定的文件名,在执行了名称空间设置后,我们打印出指定的 XML 文件的表示,从而大致上保持了对此工具稍老版本的向后兼容。
更多精彩
赞助商链接