doctest是python自带的一个模块,你可以把它叫做“文档测试”(doctest)模块。

doctest的使用有两种方式:一个是嵌入到python源中。另一个是放到一个独立文件。

doctest的概念模型:

Module doctest - 一个在docstrings中运行示例的框架。
 
在最简单的使用中,结束每个要测试的模块M:
 
def _test():
    导入doctest
    doctest.testmod()
 
如果__name__ ==“__main__”:
    _测试()
 
然后将该模块作为脚本运行将导致在
docstrings得到执行和验证:
 
python M.py
 
这将不会显示任何东西,除非一个例子失败,在这种情况下
失败的例子和失败的原因被打印到标准输出
(为什么不stderr?因为stderr是一个蹩脚的黑客<0.2.wink>),以及最后的
输出行是“测试失败”。
 
改为使用-v开关运行它:
 
python M.py -v
 
并将所有尝试的示例的详细报告一起打印到stdout
并在最后提供各种摘要。
 
您可以通过将“verbose = True”传递给testmod来强制详细模式,或禁止
它通过传递“verbose = False”。在任何一种情况下,sys.argv都不是
由testmod检查。
 
有多种其他方式可以运行doctests,包括集成
使用unittest框架,并支持运行非Python文本
包含doctests的文件。还有很多方法可以覆盖零件
doctest的默认行为

doctest潜入源码中:

例子:

用doctext测试一个Dict类:

#mydit.py

class Dict(dict):

  ,,,

  simple dict but also support access as x.y style.

  >>> d1 = Dict()

  >>> d1['x'] = 100

  >>> d1.x

  100

  >>> d1.y=200

  >>> d1['y']

  200

  >>> d2 = Dict(a=1,b=2,c='3')

  >>> d2.c

  '3'

  >>> d2['empty']

  Traceback (most recent call last):

    ...

  KeyError:'empty'

  >>> d2.empty

  Traceback(most recent call last):

    ...

  AttributeError: 'Dict' object has no attribute 'empty'

  '''

  def __init__(self,**kw):

    super(Dict,self).__init__(**kw)

  def _getattr_(self,key):

    try:

      return self[key]

    except KeyError:

      raise AttributeError(r"'Dict' object has no attribute '%s'"%key)

  def _setattr_(self,key,value):

    self[key] = value

if __name__=='_main_':

  import doctest

  docest.testmod()

doctest严格按照python交互式命令行的输入和输出来判断测试结果是否正确。只有测试异常的时候,可以用...表示中间的一大段烦人的输出。

运行python mydict.py:

$ python mydict.py

什么输出也没有。这说明我们编写的doctest运行都是正确的。

独立文件模式

如果不想或不能把测试用例写进源代码里,则还可以使用一个独立的文本文件来保存测试用例。

将doctest从测试用例:

def multiply(a, b):
"""
>>> multiply(4, 3)
12
>>> multiply('a', 3)
'aaa'
"""
return a * b
if __name__=='__main__':
import doctest
doctest.testmod(verbose=
True)
放到test_unnecessary_math.txt文件里。
1 这个例子展示如何将doctest用例放到一个独立的文件中。
2 '>>>'开头的行就是doctest测试用例。
3 不带'>>>'的行就是测试用例的输出。
4 如果实际运行的结果与期望的不一致,就标记为测试失败。 >>> from unnecessary_math import mutiply
>>> mutiply(3,4)
12
>>>mutiply('a',3)
'aaa'
注意: from 那一行也要以>>>开头
在系统的shell中执行:
python -m doctest -v test_unncessary_math.txt

  

      

python之doctest的用法的更多相关文章

  1. python 中del 的用法

    python中的del用法比较特殊,新手学习往往产生误解,弄清del的用法,可以帮助深入理解python的内存方面的问题. python的del不同于C的free和C++的delete. 由于pyth ...

  2. Python多进程并发(multiprocessing)用法实例详解

    http://www.jb51.net/article/67116.htm 本文实例讲述了Python多进程并发(multiprocessing)用法.分享给大家供大家参考.具体分析如下: 由于Pyt ...

  3. Python dictionary 字典 常用法

    Python dictionary 字典 常用法 d = {} d.has_key(key_in)       # if has the key of key_in d.keys()          ...

  4. 【python】 del 的用法

    转自 https://blog.csdn.net/love1code/article/details/47276683 python中的del用法比较特殊,新手学习往往产生误解,弄清del的用法,可以 ...

  5. Python Numpy shape 基础用法(转自他人的博客,如涉及到侵权,请联系我)

    Python Numpy shape 基础用法 shape函数是numpy.core.fromnumeric中的函数,它的功能是读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度.它的输入 ...

  6. python中argparse模块用法实例详解

    python中argparse模块用法实例详解 这篇文章主要介绍了python中argparse模块用法,以实例形式较为详细的分析了argparse模块解析命令行参数的使用技巧,需要的朋友可以参考下 ...

  7. [转]使用python来操作redis用法详解

    转自:使用python来操作redis用法详解 class CommRedisBase(): def __init__(self): REDIS_CONF = {} connection_pool = ...

  8. python之模块py_compile用法(将py文件转换为pyc文件)

    # -*- coding: cp936 -*- #python 27 #xiaodeng #python之模块py_compile用法(将py文件转换为pyc文件):二进制文件,是由py文件经过编译后 ...

  9. python format()函数的用法

    Python format() 函数的用法 复制自博主 chunlaipiupiupiu 的博客,如有侵权,请联系删除 python中format函数用于字符串的格式化 通过关键字 1 print(' ...

随机推荐

  1. IoC(控制反转)和DI(依赖注入)

    一.IOC 1.目标类 提供UserService接口和实现类 获得UserService实现类的实例 之前开发中,直接new一个对象即可,使用spring之后,将由spring创建  -->I ...

  2. 关于th,td,tr的一些相关标签

    tr表示行,td表示列,th其实也是表示列但是在这个标签中的文字会以粗体出现 <th>为表格标题,属性summar为摘要, <caption>标签为首部说明, <thea ...

  3. 在Centos7中安装Docker并实例化Mysql

    首先 本文是一篇安装流程,从初始的Centos7安装Docker后实例化一个Mysql的整个流程,其中会包含一些需要注意的疑点和坑. 实例化的Mysql是将数据和配置保存在宿主机. 注意,在安装Doc ...

  4. MySQL之my.cnf配置

    ####################配置文件开始################### # For advice on how to change settings please see # ht ...

  5. 微信小程序电商实战-首页(上)

    嗨,大家好!经过近两周的精心准备终于开始微信小程序电商实战之路喽.那么最终会做成什么样呢?当然可以肯定不会只做一个静态demo哦,先把我们小程序电商实战的整体架构发出来晒一下,请看下图:   架构图. ...

  6. 获取iframe子页面节点,响应浏览器宽高

    获取iframe子页面节点,响应浏览器宽高 html部分代码 <div> <iframe width="100%" height="100%" ...

  7. Debug view 是个好工具

    有时候不用 VS 调试, 在 代码里面加入 Debug.Writeline(" Debug information!!");  这个时候打开 debug view 就可以检测出输出 ...

  8. JavaScript基础:逻辑运算符——&&和||(短路判断)和!

    一.&&:所有条件都为true,返回true:只要有一个是false,返回false:不一定返回boolean类型值 1.可以操作任意类型的数据,不只是布尔型:(除了null.unde ...

  9. Windows server R2 2008上部署gogs git

      所需的环境 1.     安装mysql                       安装路径:F:\MySQL Server 5.7 2.     安装gogs                  ...

  10. win10下各种问题的解决办法

    本来申请这个博客是为了写一些Java学习笔记的,但是鉴于我半年内无数次重装系统的惨痛经历,所以把win10系统的一些问题总结一下. 此账号密码:1994llz. 1.win10取消开机密码: http ...