doctest是属于测试模块里的一种,对注释文档里的示例进行检测。

给出一个例子:

splitter.pydef split(line, types=None, delimiter=None):
"""Splits a line of test and optionally performs type conversion.
For example: >>> split('GOOD 100 490.50')
['GOOD', '100', '490.50']
>>> split('GOOD 100 490.50', [str, int, float])
['GOOD', 100, 490.50]
>>>
By default, splitting is perfomed on whitespace, but a different delimiter
can be selected with the delimiter keyword argument: >>> split('GOOD, 100, 490.50', delimiter=',')
['GOOOD', '100', '490.50']
>>>
""" fields = line.split(delimiter)
if types:
fields = [ty(val) for ty, val in zip(types, fields)]
return fields

可以有2种方式来使用doctest:

  • 第一种,单独建一个脚本来测试。

testsplitter.py# testsplitter.py
import splitter
import doctest nfail, ntests = doctest.testmod(splitter, verbose=True)

运行结果:

Result>>>
**********************************************************************
File "C:/Users/Administrator/Desktop/Python Scripts\splitter.py", line 8, in splitter.split
Failed example:
split('GOOD 100 490.50', [str, int, float])
Expected:
['GOOD', 100, 490.50]
Got:
['GOOD', 100, 490.5]
**********************************************************************
File "C:/Users/Administrator/Desktop/Python Scripts\splitter.py", line 14, in splitter.split
Failed example:
split('GOOD, 100, 490.50', delimiter=',')
Expected:
['GOOOD', '100', '490.50']
Got:
['GOOD', ' 100', ' 490.50']
**********************************************************************
1 items had failures:
2 of 3 in splitter.split
***Test Failed*** 2 failures.
>>>

这样注意一点,这个比对是严格比对,所以490.50和490.5是不同的。

doctest.testmod还可以带一个参数使用,显示更为详细的结果

nfail, ntests = doctest.testmod(splitter, verbose=True)

Result2>>>
Trying:
split('GOOD 100 490.50')
Expecting:
['GOOD', '100', '490.50']
ok
Trying:
split('GOOD 100 490.50', [str, int, float])
Expecting:
['GOOD', 100, 490.50]
**********************************************************************
File "C:/Users/Administrator/Desktop/Python Scripts\splitter.py", line 8, in splitter.split
Failed example:
split('GOOD 100 490.50', [str, int, float])
Expected:
['GOOD', 100, 490.50]
Got:
['GOOD', 100, 490.5]
Trying:
split('GOOD, 100, 490.50', delimiter=',')
Expecting:
['GOOOD', '100', '490.50']
**********************************************************************
File "C:/Users/Administrator/Desktop/Python Scripts\splitter.py", line 14, in splitter.split
Failed example:
split('GOOD, 100, 490.50', delimiter=',')
Expected:
['GOOOD', '100', '490.50']
Got:
['GOOD', ' 100', ' 490.50']
1 items had no tests:
splitter
**********************************************************************
1 items had failures:
2 of 3 in splitter.split
3 tests in 2 items.
1 passed and 2 failed.
***Test Failed*** 2 failures.
>>>
  • 第二种,使用__name__ == ‘__main__’: (大部分好像都使用这种的)

splitter2.py# splitter.py
def split(line, types=None, delimiter=None):
"""Splits a line of test and optionally performs type conversion.
For example: >>> split('GOOD 100 490.50')
['GOOD', '100', '490.50']
>>> split('GOOD 100 490.50', [str, int, float])
['GOOD', 100, 490.50]
>>>
By default, splitting is perfomed on whitespace, but a different delimiter
can be selected with the delimiter keyword argument: >>> split('GOOD, 100, 490.50', delimiter=',')
['GOOOD', '100', '490.50']
>>>
""" fields = line.split(delimiter)
if types:
fields = [ty(val) for ty, val in zip(types, fields)]
return fields if __name__ == '__main__':
# test myself
import doctest
doctest.testmod()

结果是一样的:

Result3**********************************************************************
File "C:/Users/Administrator/Desktop/Python Scripts/splitter.py", line 8, in __main__.split
Failed example:
split('GOOD 100 490.50', [str, int, float])
Expected:
['GOOD', 100, 490.50]
Got:
['GOOD', 100, 490.5]
**********************************************************************
File "C:/Users/Administrator/Desktop/Python Scripts/splitter.py", line 14, in __main__.split
Failed example:
split('GOOD, 100, 490.50', delimiter=',')
Expected:
['GOOOD', '100', '490.50']
Got:
['GOOD', ' 100', ' 490.50']
**********************************************************************
1 items had failures:
2 of 3 in __main__.split
***Test Failed*** 2 failures.

三言两语聊Python模块–文档测试模块doctest的更多相关文章

  1. Python -- 文档测试

    Python内置的“文档测试”(doctest)模块可以直接提取注释中的代码并执行测试. 例子: # mydict2.py class Dict(dict): ''' Simple dict but ...

  2. python中错误、调试、单元测试、文档测试

    错误分为程序的错误和由用户错误的输入引起的错误,此外还有因为各种各样意外的情况导致的错误,比如在磁盘满的时候写入.从网络爬取东西的时候,网络断了.这类错误称为异常 错误处理 普通的错误处理机制就是在出 ...

  3. python 错误、调试、单元测试、文档测试

    错误分为程序的错误和由用户错误的输入引起的错误,此外还有因为各种各样意外的情况导致的错误,比如在磁盘满的时候写入.从网络爬取东西的时候,网络断了.这类错误称为异常 错误处理 参考链接:https:// ...

  4. python错误处理/调试/单元测试/文档测试

    一.错误处理 1.错误处理 try: ... except Exception1: ... except Exception2: ... finally: ... 如果在try中发生错误,那么exce ...

  5. Winform开发框架中的内容及文档管理模块功能介绍

    在开发项目的时候,我们有一些场景需要编辑一些HTML文档,作为内容发布系统的一部分,有时候也需要对一些文档如WORD文档进行编辑管理,这样需要我们对这些内容及文档进行合适的管理.本文主要介绍在WInf ...

  6. Python学习文档指引

    Python文档资源: 形式 角色 #注释 文件中的文档 dir函数 对象中可用属性的列表 文档字符串:__doc__ 附加在对象上的文件中的文档 PyDoc:help函数 对象的交互帮助 PyDoc ...

  7. python统计文档中词频

    python统计文档中词频的小程序 python版本2.7 效果如下: 程序如下,测试文件与完整程序在我的github中 #统计空格数与单词数 本函数只返回了空格数 需要的可以自己返回多个值 def ...

  8. 如何在命令行模式下查看Python帮助文档---dir、help、__doc__

    如何在命令行模式下查看Python帮助文档---dir.help.__doc__ 1.dir函数式可以查看对象的属性,使用方法很简单,举str类型为例,在Python命令窗口输入 dir(str) 即 ...

  9. 在命令行模式下查看Python帮助文档---dir、help、__doc__

    在命令行模式下查看Python帮助文档---dir.help.__doc__   1.dir函数式可以查看对象的属性,使用方法很简单,举str类型为例,在Python命令窗口输入 dir(str) 即 ...

随机推荐

  1. MySQL [Warning]: IP address 'xxxx' could not be resolved: Name or service not known

    MySQL的error log 出现大量的 DNS反解析错误. DNS解析是指,将 域名解析成ip地址: DNS反解析是指,将IP地址反解析成域名: Version: MySQL Community ...

  2. SQL Server调优系列玩转篇三(利用索引提示(Hint)引导语句最大优化运行)

    前言 本篇继续玩转模块的内容,关于索引在SQL Server的位置无须多言,本篇将分析如何利用Hint引导语句充分利用索引进行运行,同样,还是希望扎实掌握前面一系列的内容,才进入本模块的内容分析. 闲 ...

  3. C 运算符优先级

    优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右   () 圆括号 (表达式)/函数名(形参表)   . 成员选择(对象) 对象.成员名   -& ...

  4. [转]jquery开发自定义的插件总结

    本文转自:http://www.cnblogs.com/Jimmy009/archive/2013/01/17/jquery%E6%8F%92%E4%BB%B6.html 前几天在玩jquery,今天 ...

  5. [转]使用Oracle SQL Developer 17410 提示无法从套接字获取更多数据如何解决

    本文转自:http://m.educity.cn/ite/1121475.html 将oracle?安装目录下的Network/admin/listener.ora文件中的 (PROGRAM = ex ...

  6. Codeforces 461B. Appleman and Tree[树形DP 方案数]

    B. Appleman and Tree time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  7. Codeforces 549A. Face Detection[模拟]

    A. Face Detection time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  8. Java的注解机制——Spring自动装配的实现原理

    http://www.cnblogs.com/Johness/archive/2013/04/17/3026689.html

  9. java 25 - 5 网络编程之多线程实现聊天室

    平时聊天都是在同一个窗口的,所以,这个窗口同时实现发送数据和接收数据,这时就需要多线程实现. 建立一个类: 把聊天的发送端和接收端放在同一个类,启动一个窗口 public class CharRoom ...

  10. 修复垂直滑动RecyclerView嵌套水平滑动RecyclerView水平滑动不灵敏问题

    在 Android 应用中,大部分情况下都会使用一个垂直滚动的 View 来显示内容(比如 ListView.RecyclerView 等).但是有时候你还希望垂直滚动的View 里面的内容可以水平滚 ...