前言
通常我们会选择 unittest
或者 pytest
来做单元测试,但是相对来说代码量都比较大,我们想要探寻一种能够在写代码的时候就能同步完成单元测试的工具。今天,它来了,Doctest
。
Doctest
其为 Python
内置的文档测试库,你会发现很多 Python
内置库都使用了这个工具来做单元测试。你可以认为他就是以注释文档的形式来实现单元测试。
举个栗子
def add(x,y): ''' calc x add y... Example: >>> add(1,1) 2 >>> add(-1,1) 0 ''' return x+y if __name__=='__main__': import doctest doctest.testmod(verbose=True) 复制代码
运行结果
PS C:\Users\xxx\Desktop\study> python .\doct.py Trying: add(1,1) Expecting: 2 ok Trying: add(-1,1) Expecting: 0 ok 1 items had no tests: __main__ 1 items passed all tests: 2 tests in __main__.add 2 tests in 2 items. 2 passed and 0 failed. Test passed. 复制代码
如上,如果你是开发组的白盒测试,那么你可以要求开发按照如上格式将测试用例进行注释,然后你就可以很方便的进行单元测试了。
Q&A
关于如何测试别人的代码
假设,有人写的代码在 a.py
中,内容如下:
def execDouble(x): ''' exec num double... Example: # Case1: >>> execDouble(1) 2 # Case2: >>> execDouble(3) 6 ''' return x*2 复制代码
我们在 b.py
中对 a.py
中的方法进行导入并且测试。
import doctest from a import execDouble doctest.testmod(verbose=True) 复制代码
执行测试:python b.py
网络异常,图片无法展示
|
被测方法未被识别,这是为什么呢?通过查询
doctest
的官方文档,我们得知,如果想要执行导入的对象,则需要在测试代码中定义__test__
字典来指定。
网络异常,图片无法展示|
在 b.py
中增加如下行:
import doctest from a import execDouble __test__={'execDouble':execDouble} doctest.testmod(verbose=True) 复制代码
重新执行测试:
网络异常,图片无法展示
|
以上就是今天的全部内容了,感谢您的阅读,我们下节再会。