unittest是Python内置的标准类库。它的API跟java的JUnit、.net的NUnit,C++的CppUnit很相似。
通过继承unittest.TestCase来创建一个测试用例。
具体请参考 文档 。
举个例:
import unittestdef fun(x): return x + 1class MyTest(unittest.TestCase): def test(self): self.assertEqual(fun(3), 4)执行后成功。
但是,如果将期望的结果改成5,则执行的结果如下图所示:
2.2 Doctest
doctest 模块会搜索那些看起来像交互式会话的 Python 代码片段,然后尝试执行并验证结果.即使从没接触过 doctest,我们也可以从这个名字中窥到一丝端倪。“它看起来就像代码里的文档字符串(docstring)一样” 如果你这么想的话,就已经对了一半了。
举个例子:
def square(x): """Squares x. >>> square(2) 4 >>> square(-2) 4 >>> square(5) 25 """ return x * xif __name__ == '__main__': import doctest doctest.testmod()当执行该代码后,会执行文档内>>> 后面的测试代码,并与下一行的结果进行比对。执行的结果如下:
但是,如果我们把结果改一下,square(2)的结果改成5,测试代码如下:
def square(x): """Squares x. >>> square(2) 5 >>> square(-2) 4 >>> square(5) 25 """ return x * xif __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 + 1def test_answer(): assert func(3) == 5第三步,执行测试代码。
找到pytest安装路径。用其所在的解析器(python.exe)执行test.py ,执行命令比如:执行的结果如下图所示:
2.4 Nose
Nose是对unittest的扩展,使得python的测试更加简单。nose自动发现测试代码并执行,nose提供了大量的插件,比如测试输出的xUnitcompatible,覆盖报表等等。
nose的详细文档: https://nose.readthedocs.org/en/latest/
注意:nose本身是支持python3的,但是很多它的插件不支持。
2.5 tox
最大的特色,是自动最测试环境的管理以及使用多个解析器配置进行测试。
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 unittestclass MyTest(unittest.TestCase): ...2.7 mock unittest.mock是用来测试python的库。在python3.3版本以后,这个是一个标准库。对老版本来说,使用pip install mock 进行安装。
mock的精髓在于,你可以使用模拟的对象来替代你的系统的一部分,然后验证后续的执行是否正确。mock的详细文档:http://www.voidspace.org.uk/python/mock/下一篇我们重点讲讲nose的使用方法。
新闻热点
疑难解答