当前位置: 首页 > 工具软件 > doctest > 使用案例 >

Python之文档测试模块——doctest

常鸿朗
2023-12-01

doctest是python自带的一个模块。doctest有两种使用方式:一种是嵌入到python源码中,另外一种是放到一个独立文件。

doctest模块会搜索那些看起来像是python交互式会话中的代码片段,然后尝试执行并验证结果。

1 doctest嵌入源码中

下面的代码只有一个函数,里面嵌入了两个doctest测试用例,文件名为naruto.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)

有两个地方可以放doctest测试用例,一个位置是模块的最开头,另一个位置是函数声明语句的下一行(就像上面的例子这样)。除此之外的其它地方不能放,放了也不会执行。

verbose参数,如果设置为True则在执行测试的时候会输出详细信息。默认是False,表示运行测试时,只有失败的用例会输出详细信息,成功的测试用例不会输出任何信息。

将上面提到的文件放在D盘(或者其他你觉得方便的目录),打开cmd命令行,切换到naruto.py所在的目录(我的在D盘),输入下面代码:

python naruto.py

输出结果为:

Trying:
    multiply(4, 3)
Expecting:
    12
ok
Trying:
    multiply('a', 3)
Expecting:
    'aaa'
ok
1 items had no tests:
    __main__
1 items passed all tests:
   2 tests in __main__.multiply
2 tests in 2 items.
2 passed and 0 failed.
Test passed.

上面启动测试的方式是在__main__函数中调用了doctest.testmod()方法。

如果__main__函数有其他用途,不方便调用doctest.testmod()方法,那么可以用另外一种执行测试的方法,在cmd中输入:

$ python -m doctest naurto.py 
$ python -m doctest -v naruto.py

上面,-m 表示引用一个模块,-v 等价于 verbose=True。运行输出与上面基本一样。

2 doctest放到独立文件中

如果不想将doctest测试用例嵌入到python的源码中,则可以建立一个独立的文本文件来保存测试用例。

将naruto.py中的doctest内容拷贝出来放到sasuke.txt文件里,注意sasuke.txt也要放在与naruto.py相同的目录中,我放在了是D盘。

下面是sasuke.txt的内容:

>>> from naruto import multiply
>>> multiply(4, 3)
12
>>> multiply('a', 3)
'aaa'

注意:from 那一行也要以>>>开头。

打开cmd(使用命令d:切换到D盘目录),输入:

python -m doctest -v sasuke.txt

输出为:

Trying:
    from naruto import multiply
Expecting nothing
ok
Trying:
    multiply(4, 3)
Expecting:
    12
ok
Trying:
    multiply('a', 3)
Expecting:
    'aaa'
ok
1 items passed all tests:
   3 tests in sasuke.txt
3 tests in 1 items.
3 passed and 0 failed.
Test passed.

完美

END

 类似资料: