zoukankan      html  css  js  c++  java
  • python之doctest的用法

    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

     

      

          

  • 相关阅读:
    SpringCloud 学习之概述
    定位慢查询
    中止线程
    笨办法41学会说面向对象【pyinstaller安装使用
    pip安装
    笨办法40模块, 类和对象class
    笨办法39字典dict
    笨办法38列表操作
    笨办法35分支和函数
    笨办法34访问列表元素(列表方法)
  • 原文地址:https://www.cnblogs.com/whrTC/p/9149997.html
Copyright © 2011-2022 走看看