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 delimitercan 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 doctestnfail, 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 delimitercan 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 fieldsif __name__ == '__main__':# test myselfimport doctestdoctest.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.

转载于:https://www.cnblogs.com/herbert/p/3244499.html

三言两语聊Python模块–文档测试模块doctest相关推荐

  1. Python之文档测试

    0 参考文档 Sphinx--自动生成Python文档 Python之文档测试模块--doctest 1 doctest doctest是python自带的一个模块.doctest有两种使用方式:一种 ...

  2. python/单元测试-文档测试

    文章目录 单元测试 __setattr__ 运行单元测试: setUp与tearDown 练习:对Student类编写单元测试,结果发现测试不通过,请修改Student类,让测试通过: 文档测试 单元 ...

  3. python scipy模块文档_scipy模块stats文档

    https://github.com/yiyuezhuo/scipy.stats-doc-ch https://docs.scipy.org/doc/scipy/reference/tutorial/ ...

  4. python3模块文档_Python3模块-Python入门到精通

    模块 模块是一个包含所有定义的函数和变量的文件,其后缀名是 .py .模块可以被别的程序引入,以调用该模块中的函数等功能.这也是使用 python 标准库的方法. import 语句 想要引用模块,只 ...

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

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

  6. python测试开发教程_文档测试

    如果你经常阅读Python的官方文档,可以看到很多文档都有示例代码.比如re模块就带了很多示例代码: >>> import re >>> m = re.search ...

  7. Python单元测试、Python文档测试

    Python语言基础(单元测试–对函数进行测试)(熟练) 概述: 单元测试: 用来对一个函数,一个类或者一个模块来进行一个正确性的校验工作 结果: 1.单元测试通过:说明测试的函数功能正常 2.单元测 ...

  8. python文档测试_【Python入门】19.调试器pdb、单元测试unittest和文档测试doctest

    笔记更新于2019年12月4日, 摘要:各种调试方法介绍assert.logging.调试器pdb:单元测试unittest的编写方法.如何运行单元测试:文档测试doctest的编写 写在前面:为了更 ...

  9. python学习-测试(文档测试 doctest、单元测试 unittest)

    文章目录 文档测试 单元测试 文档测试 doctest:一个简单的模块,为检查文档而设计,但也适合用来编写单元测试. def func(a, b):"""doc test ...

  10. python 帮助文档、自我解释

    现在让我们以交互方式使用 Python 来开始研究.当我们从命令行启动 Python 时,就进入了 Python shell,在这里可以输入 Python 代码,而且立刻会从 Python 解释器获得 ...

最新文章

  1. C++知识点23——使用C++标准库(顺序容器list的其他操作)
  2. c语言中常用的预处理命令6,C语言的预处理命令
  3. ABAP string函数一览
  4. linux进度条脚本,Linux下简易进度条的实现代码
  5. 338. 比特位计数 golang
  6. 百度链接提交php获取状态码,新网站,在百度提交了首页链接,但是一直没有收录,也没有爬虫抓取,怎么回事呢?(悬赏1元) - 搜外SEO问答...
  7. Java 中单引号和双引号的区别
  8. php读取js为文本,PHP / JS文本差异
  9. python结构体数组传出接收c动态库_使用Python向C语言的链接库传递数组、结构体、指针类型的数据...
  10. pyqt5-两个窗口之间相互显示隐藏
  11. 27. 使用distance和advance将容器的const_iterator转换成iterator
  12. python计算金星凌日
  13. 记录ESP32 出现未定义vTaskGetRunTimeStats的奔溃时刻!
  14. php函数参数中括号,thinkphp手册中函数的可选参数的中括号为什么是包含的关系?...
  15. ANSI C标准库和POSIX库
  16. 1.6 Scala代码风格
  17. 【机器视觉】移动机器人控制软件的设计与实现
  18. 统计表中百分比的表示方法
  19. asm.js 和 WebAssembly 有什么区别?
  20. 基于tensorflow2.0+CNN实现手势识别(全)

热门文章

  1. win和linux下DBI安装手册
  2. 【转】mysql数据库中实现内连接、左连接、右连接
  3. [UI] 精美UI界面欣赏[4]
  4. 摄像头bug查找工作总结
  5. 原来我不懂printf
  6. combox取值以及赋值的方法
  7. 改变风格(css)的四种方法
  8. ScrollView嵌套GridView,自定义Gridview动态设置Item的高度,屏幕适配
  9. 第一部分 第四章 1059-1101 答案合集
  10. vgcreate 创建卷组