Python利用doctest模块进行文档测试?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
所谓文档测试,指的是通过doctest模块运行Python源文件的说明文档中的测试用例,从而生成测试报告。
前面在查看Python的模块文档时,经常会看到如下信息:
在祝辞祝辞os.path.commonprefix ((& # 39;/usr/lib # 39;, & # 39;/usr/地方/lib # 39;]) & # 39;/usr/1 & # 39; 祝辞祝辞祝辞os.path.commonpath ([& # 39;/usr/lib # 39;,, & # 39;/usr/地方/lib # 39;]) & # 39;/usr # 39;
用户完全可以将这些代码拷贝到Python的交互式解释器中运行,然后可以看到运行结果与文档中示例代码的输出结果完全一致。
上面的说明就是文档测试的注释,文档测试工具可以提取说明文档中的测试用例,其中,祝辞的在祝辞”之后的内容表示测试用例,接下来的一行则代表该测试用例的输出结果。文档测试工具会判断测试用例的运行结果与输出结果是否一致,如果不一致就会显示错误信息。
现在定义一个简单的模块,该模块包含一个函数和一个类,程序为该函数和该类提供了说明文档,该文档中包含了测试用例。程序代码如下:
def square (x): ,,,& # 39;& # 39;& # 39; ,,,一个用于计算平方的函数 ,,,例如 ,,,的在祝辞祝辞,广场(2) ,,,4 ,,,的在祝辞祝辞,广场(3) ,,,9 ,,,的在祝辞祝辞,广场(3) ,,,9 ,,,的在祝辞祝辞,广场(0) ,,,0 ,,,& # 39;& # 39;& # 39; ,,,return x *, 2, #,①,故意写错的 class 用户: ,,,& # 39;& # 39;& # 39; ,,,定义一个代表用户的类,该类包含如下两个属性: ,,,name 作用;代表用户的名字 ,,,age 作用;代表用户的年龄 ,,,例如 ,,,的在祝辞祝辞,u =,用户(& # 39;fkjava& # 39;,, 9) ,,,的在祝辞祝辞u.name ,,,& # 39;fkjava& # 39; ,,,的在祝辞祝辞u.age ,,,9 ,,,的在祝辞祝辞,u.say(& # 39;小姐:love python # 39;) ,,,& # 39;fkjava说:,小姐:love python # 39; ,,,& # 39;& # 39;& # 39; ,,,def __init__(自我,,名字,,年龄): ,,,,,,,self.name =, & # 39; fkit& # 39;, #,②,故意写错的 ,,,,,,,self.age =,年龄 ,,,def 说(自我,,内容): ,,,,,,,return self.name +, & # 39;说:,& # 39;+,内容 if __name__==& # 39; __main__ # 39;: ,,,import doctest testmod (,,,)
上面第一段注释代码就是程序为广场()函数提供的测试用例,在文档中一共为该函数提供了4个测试用例;第二段注释代码是程序类为用户提供的测试用例,在文档中一共为该类提供了3个测试用例,分别用于测试用户的名字,年龄和表示()方法。
程序最后几行代码进行了判断,如果是直接使用python命令来运行该程序(__name__等于__main__),程序将导入doctest模块,并调用该模块的testmod()函数。
从上面程序可以看的到,python为文档测试提供了doctest模块,该模块的用法非常简单,程序只要调用该模块的testmod()函数即可。
运行上面程序,可以看到如下输出结果:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * File “C: \用户桌面\ \ mengma \ 1. py",, line 25日__main__.User拷贝 Failed 例如: ,,u.name 预期: ,,,& # 39;fkjava& # 39; 有: ,,,& # 39;fkit& # 39; ********************************************************************** File “C: \用户桌面\ \ mengma \ 1. py",, line 29日__main__.User拷贝 Failed 例如: ,,,u.say(& # 39;小姐:love python # 39;) 预期: ,,,& # 39;fkjava说:,小姐:love python # 39; 有: ,,,& # 39;fkit说:,小姐:love python # 39; ********************************************************************** File “C: \用户桌面\ \ mengma \ 1. py",, line 8 __main__.square拷贝 Failed 例如: ,,,广场(3) 预期: ,,,9 有: ,,,6 ********************************************************************** File “C: \用户桌面\ \ mengma \ 1. py",, line 10 __main__.square拷贝 Failed 例如: ,,,广场(3) 预期: ,,,9 有: ,,,6 ********************************************************************** 2,items had 故障: ,,,2,of ,, 4, __main__.User拷贝 ,,,2,of ,, 4, __main__.square拷贝 * * * * * * Test 失败,4,失败。nullPython利用doctest模块进行文档测试