如何在 Python 中使用 doctest 模块进行文档测试

2023-04-13 00:00:00 文档 测试 模块

Python的doctest模块可以自动检测并运行文档字符串中的示例代码,这些示例代码可以作为测试用例。

下面是一个简单的例子,我们测试一个函数,这个函数的功能是将一个字符串反转过来:

def reverse_string(s):
    """
    反转一个字符串。

    示例:
    >>> reverse_string("pidancode.com")
    'moc.edocnadicap'

    >>> reverse_string("皮蛋编程")
    '程编蛋皮'

    """
    return s[::-1]

在函数的文档字符串中,我们添加了两个示例,用于测试函数是否能正确地反转输入的字符串。

现在,我们可以使用Python内置的doctest模块来运行这些测试用例。以下是一个演示如何使用doctest的示例:

import doctest

if __name__ == '__main__':
    doctest.testmod()

在这个示例中,我们首先导入doctest模块,然后在main函数中调用了testmod()函数,这个函数会自动搜索并执行当前模块中的所有测试用例。

接下来,我们运行这个程序,就会输出测试结果:

**********************************************************************
File "/path/to/your/code.py", line XX, in __main__
Failed example:
    reverse_string("pidancode.com")
Expected:
    'moc.edocnadicap'
Got:
    'moc.enocdnadip'
**********************************************************************
File "/path/to/your/code.py", line XX, in __main__
Failed example:
    reverse_string("皮蛋编程")
Expected:
    '程编蛋皮'
Got:
    '程编蛋皮'
**********************************************************************
1 items had failures:
   2 of   2 in __main__
***Test Failed*** 2 failures.

可以看到,第一个测试用例通过了,但是第二个测试用例失败了。在失败的测试用例下面,会输出期望的输出和实际得到的输出,这些信息有助于我们定位问题。

如果我们修复了出现错误的测试用例,再次运行程序,就应该看到所有测试用例都通过了。

需要注意的是,doctest并不是一个完整的单元测试框架,它只适合编写一些简单的、独立的测试用例,如果要编写复杂的测试用例,最好使用其他单元测试框架。

相关文章