使用doctest进行测试

作者: nummycode | 来源:发表于2016-03-29 14:59 被阅读330次

python中的doctest可以运行文档中嵌入的例子,并验证它们能否生成所期望的结果,从而对源代码进行测试。

1.示例

建立测试文件test.py

def add(a,b):
      """
      >>> add(1,2)
      3
      >>> add(4,5)
      9
      """
      return a + b

运行测试时,必须使用-m参数将doctest作为脚本来执行,但是运行测试一般不会有输出,可以使用-v参数得到详细测试信息。

python -m doctest -v test.py

得到结果如下所示:

$ python -m doctest -v test.py 
Trying:
    add(1,2)
Expecting:
    3
ok
Trying:
    add(4,5)
Expecting:
    9
ok
1 items had no tests:
    test
1 items passed all tests:
   2 tests in test.add
2 tests in 2 items.
2 passed and 0 failed.
Test passed.

但是在docstring中并非所有的内容都是测试用例,docstring中还包含其他文本,那怎么去区分这些内容呢?在docstring中测试用例以提示符>>>开始,以空行或者下一个>>>结束,介于中间的文本会被忽略。
例如:

def add(a,b):
      """
      Returns a + b
      >>> add(1,2)
      3
      >>> add(4,5)
      9
      """
      return a + b

修改后的内容测试结果是一样的。

2.处理不可预测的输出

有些情况下,可能无法预测准确的输出,但是依然可以进行测试。例如,获取某个对象的ID,每次运行测试的时候,得到的ID都是不一样的。

def identity(obj):
      """
      >>> identity(1)
      23400792
      """
      return id(obj)

每次运行的时候,获取的ID值都是不一样的,所以执行上面的测试代码是不能通过的。
测试的值可能会以不可预测的方式改变时,如果具体值对于测试结果并不重要,可以使用ELLIPSIS选项来告诉doctest忽略验证值的某些部分。
例如:
demo.py

class MyClass(object):
    pass

def unpredictable(obj):
    """Returns a new list containing obj.

    >>> unpredictable(MyClass()) #doctest: +ELLIPSIS
    [<demo.MyClass object at 0x...>]
    """
    return [obj]

unpredictable之后的注释#doctest: ELLIPSIS告诉doctest打开这个测试的ELLIPSIS选项,...将替换对象id的内存地址,这样就会忽略期望值中的一部分,实际输出将匹配,并通过测试。

相关文章

  • 使用doctest进行测试

    python中的doctest可以运行文档中嵌入的例子,并验证它们能否生成所期望的结果,从而对源代码进行测试。 1...

  • Python 中 doctest 用法简例

    1. 在代码中直接写doctest测试用例。 测试用例使用“>>>”,应输出结果就直接换行,不使用“>>>”。如果...

  • 文档测试

    Python内置的“文档测试”(doctest)模块可以直接提取注释中的代码并执行测试。doctest严格按照Py...

  • 1.使用doctest来进行单元测试

    python中自带的两种单元测试的模块,一个是doctest,一个是unittest,后一个之后遇到再说。书中p5...

  • doctest文档测试

    doctest非常有用,不但可以用来测试,还可以直接作为示例代码。通过某些文档生成工具,就可以自动把包含docte...

  • Django - 单元测试

    Django - 单元测试 Unit tests VS doctest Unit tests —— unittes...

  • 书籍:Python Testing Cookbook, 2nd

    简介 借助此基于解决方案的指南,修复Python中的日常测试问题 主要特点 使用doctest和unittest等...

  • The Python Standard Library - De

    3 doctest 3.0 Intro 为了最新测试module’s docstrings are up-to-d...

  • Python测试框架pytest

    Python 有多个测试框架如unittest doctest pytest nose选择pytest是因为...

  • 2018-11-09 Python标准库

    参考 正则 :re 测试 doctest unittest 日志:logging 打印错误信息:sys.exc_i...

网友评论

    本文标题:使用doctest进行测试

    本文链接:https://www.haomeiwen.com/subject/rbhslttx.html