使用 doctest 模块在 Python 中进行测试
我们知道 **文档字符串** 提供了有关 Python 中函数和类的额外信息。我们还可以使用 **doctest** 模块来测试这些函数。**doctest** 模块执行以 >>> 开头的代码,并将其与预期输出进行比较。
请按照以下步骤使用 **doctest** 编写函数。
导入 **doctest** 模块。
使用文档字符串编写函数。在文档字符串中,编写以下两行用于测试同一函数。
>>>function_name(*args)。
预期 **输出**。
编写函数代码。
现在,调用 doctest.testmod(name=function_name, verbose=True) 函数进行测试。如果 verbose 设置为 False 并且所有测试都通过,则看不到测试结果。最好将其设置为 True。
示例
让我们使用 doctest 编写一个简单的函数。
# importing the module import doctest # function def numbers_sum(*args) -> int: """ This function returns the sum of all the argumets Shell commands for testing incoking the function followed by expected output: >>> numbers_sum(1, 2, 3, 4, 5) 15 >>> numbers_sum(6, 7, 8) 21 """ return sum(args) # invoking the testmod function doctest.testmod(name='numbers_sum', verbose=True)
如果运行以上代码,您将获得以下结果。
Trying: numbers_sum(1, 2, 3, 4, 5) Expecting: 15 ok Trying: numbers_sum(6, 7, 8) Expecting: 21 ok 1 items had no tests: numbers_sum 1 items passed all tests: 2 tests in numbers_sum.numbers_sum 2 tests in 2 items. 2 passed and 0 failed. Test passed. TestResults(failed=0, attempted=2)
如果查看输出,每个测试之后都有一个单词 ok。这意味着预期输出和实际输出匹配。您可以在输出的末尾检查测试结果。
示例
让我们看看测试失败时会发生什么。使用错误的输出运行相同的示例。
# importing the module import doctest # function def numbers_sum(*args) -> int: """ This function returns the sum of all the argumets Shell commands for testing incoking the function followed by expected output: >>> numbers_sum(1, 2, 3, 4, 5) 10 >>> numbers_sum(6, 7, 8) 23 """ return sum(args) # invoking the testmod function doctest.testmod(name='numbers_sum', verbose=True)
输出
如果执行上述程序,您将获得以下结果。
Trying: numbers_sum(1, 2, 3, 4, 5) Expecting: 10 ********************************************************************** File "__main__", line 10, in numbers_sum.numbers_sum Failed example: numbers_sum(1, 2, 3, 4, 5) Expected: 10 Got: 15 Trying: numbers_sum(6, 7, 8) Expecting: 23 ********************************************************************** File "__main__", line 12, in numbers_sum.numbers_sum Failed example: numbers_sum(6, 7, 8) Expected: 23 Got: 21 1 items had no tests: numbers_sum ********************************************************************** 1 items had failures: 2 of 2 in numbers_sum.numbers_sum 2 tests in 2 items. 0 passed and 2 failed. ***Test Failed*** 2 failures. TestResults(failed=2, attempted=2)
如果查看测试结果,2 个测试失败了。您还可以查看输出中的 **预期** 和 **实际** 输出。
结论
如果您在本教程中有任何疑问,请在评论部分中提出。
广告