14.4 将测试输出用日志记录到文件中

    运行单元测试一个常见技术就是在测试文件底部加入下面这段代码片段:

    1.  
    2. def main(out=sys.stderr, verbosity=2):
    3. loader = unittest.TestLoader()
    4. unittest.TextTestRunner(out,verbosity=verbosity).run(suite)
    5.  
    6. if __name__ == '__main__':
    7. main(f)

    本节感兴趣的部分并不是将测试结果重定向到一个文件中,而是通过这样做向你展示了 unittest 模块中一些值得关注的内部工作原理。

    这两步是分开的,unittest.TestLoader 实例被用来组装测试套件。 是它定义的方法之一,用来收集测试用例。它会为 TestCase 类扫描某个模块并将其中的测试方法提取出来。如果你想进行细粒度的控制,可以使用 loadTestsFromTestCase() 方法来从某个继承TestCase的类中提取测试方法。TextTestRunner 类是一个测试运行类的例子,这个类的主要用途是执行某个测试套件中包含的测试方法。这个类跟执行 函数所使用的测试运行器是一样的。不过,我们在这里对它进行了一些列底层配置,包括输出文件和提升级别。尽管本节例子代码很少,但是能指导你如何对 unittest 框架进行更进一步的自定义。要想自定义测试套件的装配方式,你可以对 TestLoader 类执行更多的操作。为了自定义测试运行,你可以构造一个自己的测试运行类来模拟 TextTestRunner 的功能。而这些已经超出了本节的范围。 模块的文档对底层实现原理有更深入的讲解,可以去看看。