Python 天天美味(37) - 让python的unittest像gtest一样输出

Python自带的unittest已经很简单易用了,不过我一直不喜欢的是它的命令行输出,格式显得有点乱。而我比较喜欢的是gtest的命令行输出格式,用不同的颜色进行标识,整齐划一,非常明了。于是,我扩展一下Python的unittest模块,让它也能输出和gtest一样好看的命令行结果。

首先,我们先来看看unittest默认的命令行输出结果。这里,我先随便写两个测试案例,让其中一个通过,另外一个不通过,然后查看一下测试结果。

class FooTest(unittest.TestCase):

    def setUp(self):

        self.a = 1

    def testPass(self):

        self.a = self.a + 1

        self.assertEqual(2, self.a)

        

    def testFail(self):

        self.a = self.a + 1

        self.assertEqual(3, self.a)

main函数,调用unittest自己的TextTestRunner:

输出的结果:

 

有点凌乱(当然,可能你并不觉得),好的,接下来开始实现一个自定义的TestRunner,让unittest输出和gtest一样,使用不同的颜色。

 

这个过程其实很简单,主要分为两个步骤:

  1. 编写自定义的TestRunner类,执行其中的run方法,控制整个测试的过程和输出。参照unitest自己的TextTestRunner方法就好了。只是把输出部分做一些修改。

  2. 编写自定义的TestResult类,继承自unittest中的TestResult类。重写其中几个方法,也都是修改输出内容的部分。

 

当然,我们还需要在命令行中输出不同的颜色。

如果你不是使用的Windows,可以参照:http://code.activestate.com/recipes/475116-using-terminfo-for-portable-color-output-cursor-co/

如果你使用的是Windows,其实只要调用一个Windows API就好了。这个API就是SetConsoleTextAttribute。见下面的代码:

TestRunner类

TestResult类

执行

 

效果

 

(哈哈,简直一山寨版gtest的输出啊!~)

 

代码下载: http://coderzh.googlecode.com/svn/trunk/CodeSnippet/myunittest.py

Python 天天美味(32) - python数据结构与算法之堆排序 

Python 天天美味(33) - 五分钟理解元类(Metaclasses)[转]

Python 天天美味(34) - Decorators详解

Python 天天美味(35) - 细品lambda

Python 天天美味(36) - 用Python实现Spy++ 

[温馨提示]:该文章由原博客园导入而来,如排版效果不佳,请移步:http://www.cnblogs.com/coderzh/archive/2010/08/23/custom-python-unittestoutput-as-gtest.html

微信扫一扫交流

作者:CoderZh
微信关注:hacker-thinking (程序员思考者)
本文出处:https://blog.coderzh.com/2010/08/23/custom-python-unittestoutput-as-gtest/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。