unittest是Python内置的标准类库。它的API跟Java的JUnit、.net的NUnit,C++的CppUnit很类似。html
经过继承unittest.TestCase来建立一个测试用例。python
具体请参考文档。数据结构
举个例:框架
import unittest def fun(x): return x + 1 class MyTest(unittest.TestCase): def test(self): self.assertEqual(fun(3), 4)
执行后成功。函数
可是,若是将指望的结果改为5,则执行的结果以下图所示:工具
doctest 模块会搜索那些看起来像交互式会话的 Python 代码片断,而后尝试执行并验证结果.即便从没接触过 doctest,咱们也能够从这个名字中窥到一丝端倪。“它看起来就像代码里的文档字符串(docstring)同样” 若是你这么想的话,就已经对了一半了。单元测试
举个例子:测试
def square(x): """Squares x. >>> square(2) 4 >>> square(-2) 4 >>> square(5) 25 """ return x * x if __name__ == '__main__': import doctest doctest.testmod()
当执行该代码后,会执行文档内>>> 后面的测试代码,并与下一行的结果进行比对。执行的结果以下:spa
可是,若是咱们把结果改一下,square(2)的结果改为5,测试代码以下:.net
def square(x): """Squares x. >>> square(2) 5 >>> square(-2) 4 >>> square(5) 25 """ return x * x if __name__ == '__main__': import doctest doctest.testmod()
执行的测试结果以下所示:
2.3 py.test
py.test是unittest的替代工具。
尽管它是一个功能丰富、灵活的测试框架,可是它的语法很简单。建立一个单元测试就像编写一个模块同样。相比unittest,实现相同的测试功能,py.test作的事情更少。
py.test详细文档。
首先,安装py.test
pip install pytest
第二步,编写测试代码
def func(x): return x + 1 def test_answer(): assert func(3) == 5
第三步,执行测试代码。
执行的结果以下图所示:
Nose是对unittest的扩展,使得python的测试更加简单。nose自动发现测试代码并执行,nose提供了大量的插件,好比测试输出的xUnitcompatible,覆盖报表等等。
nose的详细文档:https://nose.readthedocs.org/en/latest/
注意:nose自己是支持python3的,可是不少它的插件不支持。
最大的特点,是自动最测试环境的管理以及使用多个解析器配置进行测试。
tox的详细文档:http://testrun.org/tox/latest/
2.6 Unittest2
是unitest的升级版。对API进行了改善以及更好的诊断语法。
unittest2的详细文档:https://pypi.python.org/pypi/unittest2
首先,安装
pip install unittest2
为了之后能在unittest与unittest2之间进行切换,最好的代码编写方式以下:
import unittest2 as unittest class MyTest(unittest.TestCase): ...
2.7 mockunittest.mock是用来测试python的库。在python3.3版本之后,这个是一个标准库。 对老版原本说,使用pip install mock 进行安装。
mock的精髓在于,你可使用模拟的对象来替代你的系统的一部分,而后验证后续的执行是否正确。
mock的详细文档:http://www.voidspace.org.uk/python/mock/
下一篇咱们重点讲讲nose的使用方法。