zoukankan      html  css  js  c++  java
  • python测试标准库doctest

    引言:

    doctest是python的一个测试用标准库。

    顾名思义,这个模块会寻找程序里面看起来像交互式Python会话的文本片段,然后运行这个会话,来判断实际运行结果和你希望的结果是否一致。

    这个模块可以用来进行回归测试,或者在编写教程性的文档时使用

    基本使用:

    1.通过Docstrings测试

    我们先创建一个example.py,代码如下

     1 '''
     2 docstrings可以放的位置1
     3
     4 >>> sum(1, 3)
     5 4
     6 
     7 '''
     8 
     9 
    10 def sum(a, b):
    11     '''
    12     docstrings可以放的位置2
    13     >>> sum(3, 5)
    14     8
    15     
    16     >>> sum('a', 'c')
    17     'ac'
    18     '''
    19     return a + b
    20     
    21 if __name__ == "__main__":
    22     import doctest
    23     doctest.testmod()

    然后我们在控制台执行命令python example.py -v,则会输出测试的结果如下

    $ python example.py -v
    Trying:
        sum(1, 3)
    Expecting:
        4
    ok
    Trying:
        sum(3, 5)
    Expecting:
        8
    ok
    Trying:
        sum('a', 'c')
    Expecting:
        'ac'
    ok
    2 items passed all tests:
       1 tests in __main__
       2 tests in __main__.sum
    3 tests in 2 items.
    3 passed and 0 failed.
    Test passed.
    

     注意,在样例全部通过,没有failed的情况下,“python example.py”是不会输出任何东西的,需要加参数-v打印所有的测试样例。我们可以把examp.py的第5行换成错误的结果99,在执行“python example.py”,那么会显示没有通过的样例,如下。

    $ python example.py
    **********************************************************************
    File "example.py", line 4, in __main__
    Failed example:
        sum(1, 3)
    Expected:
        99
    Got:
        4
    **********************************************************************
    1 items had failures:
       1 of   1 in __main__
    ***Test Failed*** 1 failures.

    还有一点要注意的是,文档注释里面的

    >>> sum(1, 3)
    

     ">>>"后面记得跟一个空格

    我们再看一下

    if __name__ == "__main__":
        import doctest
        doctest.testmod()

    如果你不想在__main__中执行testmod(),也可以不写,执行python -m doctest -v example.py也行。

    2.通过Test File测试

    我们新建一个文本文件example.txt,里面写入

    >>> from example import sum
    >>> sum(2, 3)
    5
    

     然后在example.py中替换testmod()函数为testfile()

    import doctest
    doctest.testfile("example.txt")

    然后和1一样,运行python example.py -v

    同样的,如果你不想在example.py中运行testfile(),你也可以用如下命令

    python -m doctest -v example.txt

    3.如何写docstring

    docstring模块会搜索所有的函数,类和方法的文档字符串,导入到模块中的对象不会去搜索。

    大部分情况下,我们可以直接粘贴交互式控制台的输出到文档注释中。但是有几点是需要注意的。

    • 预期输出不能包含全空白行。因为这会当成输出的结束。如果一定要有空白行,用<BLANKLINE>替代
    • Tab字符会被替换成8个空格
    • 捕获输出到stdout的内容,stderr不会被捕获
    • 关于异常,输出必须以Traceback开头。比如
      Traceback (most recent call last):
      Traceback (innermost last):
      

    参考资料:

    Python官方文档: https://docs.python.org/3/library/doctest.html

    《流畅的Python》

    Python36Lib est est_doctest.py

  • 相关阅读:
    JavaScript 的数据类型及其检测
    编写JavaScript 代码的5个小技巧
    canvas标签的基本用法
    析构函数的调用------新标准c++程序设计
    类型转换构造函数 及使用explicit避免类型自动转换------新标准c++程序设计
    c++小知识
    this指针------新标准c++程序设计
    类的互相包含------新标准c++程序设计
    封闭类------新标准c++程序设计
    c++内存模型------计算机系统核心概念及软硬件实现
  • 原文地址:https://www.cnblogs.com/pusidun/p/8416727.html
Copyright © 2011-2022 走看看