doctest是python自带的一个模块。本博客将介绍doctest的两种使用方式:一种是嵌入到python源码中,另外一种是放到一个独立文件。
doctest 的概念模型
在python的官方文档中,对doctest是这样介绍的:
doctest模块会搜索那些看起来像是python交互式会话中的代码片段,然后尝试执行并验证结果。
类似于docstring编写的注释:http://www.maixj.net/ict/python-docstring-16247
doctest的编写过程就像你在一个交互式shell中导入了一个被测试模块,然后一条一条执行被测试模块里面的函数一样。其实实际上doctest也是这么编写的,写好一个模块之后,在shell中测试这个模块里面的函数,将shell会话中的内容复制粘贴成doctest用例。
doctest嵌入源码中
下面的模块只有一个函数,里面嵌入了两个doctest测试用例,unnecessary_math.py:
1 | ''' |
得到输出结果是:
1 | liuchunmings-MacBook-Pro:exersice liuchunming$ python unnecessary_math.py |
上面启动测试的方式是在main函数中调用了doctest.testmod()方法。如果main函数有其他用途,不方便调用doctest.testmod()方法,那么可以用另外一种执行测试的方法:
1 | $ python -m doctest unnecessary_math.py |
这里 -m 表示引用一个模块,-v 等价于 verbose=True。运行输出与上面基本一样。
doctest独立文件
如果不想将doctest测试用例嵌入到python的源码中,则可以建立一个独立的文本文件来保存测试用例。
将doctest测试用例从上面的python源码中剥离出来放到test_unnecessary_math.txt文件里。
1 | 这个例子展示如何将doctest用例放到一个独立的文件中。 |
注意:from 那一行也要以>>>开头。
在系统的shell中执行:
1 | python -m doctest -v test_unnecessary_math.txt |