10.3 文档测试

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

doctest严格按照Python交互式命令行的输入和输出来判断测试结果是否正确。

例如:10.2-doctest.py

# 文档测试闰年问题
def run(year):
    """
    返回给定年份是否是闰年
    >>> run(1987)
    '平年'
    >>> run(1984)
    '闰年'
    >>> run(1900)
    '平年'
    >>> run(2000)
    '闰年'
    """
    res = '平年'
    if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
        res = '闰年'
    return res


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

结果没有任何输出,说明测试结果正确。

如果改变其中的代码,例如将

if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:

改为:

if year % 4 == 0 and year % 100 != 0:

则闰年的判断有问题,输出为:

**********************************************************************
File "c:/Projects/kejian/python/code/ch10/10.2-doctest.py", line 11, in __main__.run
Failed example:
    run(2000)
Expected:
    '闰年'
Got:
    '平年'
**********************************************************************
1 items had failures:
   1 of   4 in __main__.run
***Test Failed*** 1 failures.

这次的测试有一个item执行失败,并给出预期结果与实际结果。(不同开发环境显示结果稍有不同。)