Python标准库 doctest 可以搜索程序中类似于交互式Python代码的文本片段,并运行这些交互式代码来验证是否符合预期结果和功能,常用于Python程序的模块测试。
使用doctest模块测试Python代码。
下面的代码演示了doctest模块的用法,定义了一个函数,预期功能为可对整数或实数相加,或连接两个字符串、列表、元组,或对两个集合求并集,并返回结果。
1 def add(value1,value2):
2 #下面三个引号之间是测试代码,doctest会搜索这些代码并执行
3 #并且根据执行结果与预期结果匹配程度来测试代码是否正确
4 '''
5 return the addition of two numbers or the concatenation of two string/list/tuple
6 >>> add(3,5)
7 8
8 >>> add(3.0,5.0)
9 8.0
10 >>> add([1,2],[3,4])
11 [1,2,3,4]
12 >>> add((1,),(2,3,4))
13 (1,2,3,4)
14 >>> add(1,[3])
15 TypeError
16 >>> add(1,'2')
17 TypeError
18 >>> add([1],(2))
19 TypeError
20 >>> add('1234',[1,2,3,4])
21 TypeError
22 >>> add({1,2,3},{3,4,5})
23 {1,2,3,4,5}
24 >>> add({1:1},{2:2})
25 TypeError
26 '''
27
28 #下面是正式的功能代码
29 if type(value1) not in (int,float,str,list,tuple,set):
30 raise TypeError('value1 and value2 must be the type of int,float,str,list,tuple,or set')
31
32 if type(value1) != type(value2):
33 raise TypeError('value1 and value2 must be of the same type')
34
35 if type(value1) == set:
36 return value1 | value2
37 else:
38 return value1 + value2
39
40 if __name__ == '__main__':
41 import doctest
42 doctest.testmod()
43 print(add(3,5))
把上面的代码保存成Python程序文件doctest_demo.py,在IDLE中直接运行,如果函数功能完全符合预期功能要求就会输出正确的结果,如果有不符合预期结果的代码就会给出相应的提示。在命令行提示符环境中使用-v参数的方式执行,可以看到详细的测试过程。