DocTest超简单的单元测试框架

2022-06-17 09:13:43 浏览数 (1)

前言

通常我们会选择 unittest 或者 pytest 来做单元测试,但是相对来说代码量都比较大,我们想要探寻一种能够在写代码的时候就能同步完成单元测试的工具。今天,它来了,Doctest

Doctest

其为 Python 内置的文档测试库,你会发现很多 Python 内置库都使用了这个工具来做单元测试。你可以认为他就是以注释文档的形式来实现单元测试。

举个栗子

代码语言:javascript复制
def add(x,y):
    '''
    calc x add y...

    Example:

    >>> add(1,1)
    2

    >>> add(-1,1)
    0
    '''
    return x y

if __name__=='__main__':
    import doctest
    doctest.testmod(verbose=True)

运行结果

代码语言:javascript复制
PS C:UsersxxxDesktopstudy> python .doct.py
Trying:
    add(1,1)
Expecting:
    2
ok
Trying:
    add(-1,1)
Expecting:
    0
ok
1 items had no tests:
    __main__
1 items passed all tests:
   2 tests in __main__.add
2 tests in 2 items.
2 passed and 0 failed.
Test passed.

如上,如果你是开发组的白盒测试,那么你可以要求开发按照如上格式将测试用例进行注释,然后你就可以很方便的进行单元测试了。

Q&A

关于如何测试别人的代码

假设,有人写的代码在 a.py 中,内容如下:

代码语言:javascript复制
def execDouble(x):
    '''
    exec num double...

    Example:

    # Case1:
    >>> execDouble(1)
    2

    # Case2:
    >>> execDouble(3)
    6
    '''

    return x*2

我们在 b.py 中对 a.py 中的方法进行导入并且测试。

代码语言:javascript复制
import doctest
from a import execDouble

doctest.testmod(verbose=True)

执行测试:python b.py

被测方法未被识别,这是为什么呢?通过查询 doctest 的官方文档,我们得知,如果想要执行导入的对象,则需要在测试代码中定义__test__字典来指定。

b.py 中增加如下行:

代码语言:javascript复制
import doctest
from a import execDouble
__test__={'execDouble':execDouble}

doctest.testmod(verbose=True)

重新执行测试:

以上就是今天的全部内容了,感谢您的阅读,我们下节再会。

0 人点赞