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. LINUX内核笔记:自旋锁

    目录 自旋锁作用与基本使用方法? 在SMP和UP上的不同表现? 自旋锁与上下文 使用spin_lock()后为什么不能睡眠? 强调:锁什么? 参考   1.自旋锁作用与基本使用方法? 与其他锁一样,自 ...

  2. Guava中Predicate的常见用法

    Guava中Predicate的常见用法 1.  Predicate基本用法 guava提供了许多利用Functions和Predicates来操作Collections的工具,一般在 Iterabl ...

  3. idea常用快捷键

    十大Intellij IDEA快捷键 2015-01-16 21:31 122307人阅读 评论(38) 收藏 举报 本文章已收录于: .embody { padding: 10px 10px 10p ...

  4. python实现一个图灵机器人

    这标题就是个噱头...其实用的别人的接口,就是这货. 下面是代码: # -*- coding: utf-8 -*- import urllib,urllib2 import sys import js ...

  5. RPM方式编译升级centos内核

    [root@iZ2893wjzgyZ ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org [root@iZ2893wjzgyZ ...

  6. Centos6.5 设置nfs

    安装 rpcbind 和 nfs-utils yum install rpcbind yum install nfs-utils 设置共享目录 [root@bogon ~]# vim /etc/exp ...

  7. PAT 1014. 福尔摩斯的约会 (20)

    大侦探福尔摩斯接到一张奇怪的字条:"我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm".大侦 ...

  8. Html代码保存为Pdf文件

    前段时间Insus.NET有实现了<上传Text文档并转换为PDF>http://www.cnblogs.com/insus/p/4313092.html 和<截取视图某一段另存为部 ...

  9. Html5的一些引擎使用感触

    记得在2011年的时候,51CTO曾经采访我对H5的看法,因为当时Html5小组和雷友的关系,感觉是一片大火的形式,当时我的看法是:第一盈利模式不清晰,第二硬件跟不上,第三技术不成熟. 第一和第二点很 ...

  10. U3D sorting layer, sort order, order in layer, layer深入辨析

    1,layer是对游戏中所有物体的分类别划分,如UIlayer, waterlayer, 3DModelLayer, smallAssetsLayer, effectLayer等.将不同类的物体划分到 ...