doctest API围绕以下两个用于存储docstrings&minus的交互式示例的容器类;
示例 : 一个Python语句,与其预期输出配对.
DocTest : 一组示例,通常从单个文档字符串或文本文件中提取.
定义以下附加处理类来查找,解析,并运行,并检查doctest示例 :
DocTestFinder : 查找给定模块中的所有文档字符串,并使用DocTestParser从包含交互式示例的每个文档字符串创建DocTest.
DocTestParser &减去;从字符串创建doctest对象(例如对象的docstring).
DocTestRunner : 执行doctest中的示例,并使用OutputChecker验证其输出.
OutputChecker : 将doctest示例的实际输出与预期输出进行比较,并确定它们是否匹配.
DocTestFinder类
它是一个处理类,用于从其docstring和其包含的对象的文档字符串中提取与给定对象相关的doctests. Doctests当前可以从以下对象类型中提取 - 模块,函数,类,方法,staticmethods,classmethods和属性.
此类定义find()方法.它返回由对象的文档字符串或其任何包含对象的文档字符串定义的DocTests列表.
DocTestParser类
它是一个处理类,用于从字符串中提取交互式示例,并使用它们来创建DocTest对象.此类定义以下方法 :
get_doctest() : 从给定字符串中提取所有doctest示例,并将它们收集到 DocTest 对象中.
get_examples(string[, name]) : 从给定字符串中提取所有doctest示例,并将它们作为示例对象的列表返回.行号从0开始.可选参数名称是标识此字符串的名称,仅用于错误消息.
parse(string[, name])) : 将给定的字符串分为示例和插入文本,并将它们作为交替的示例和字符串列表返回. 示例的行号从0开始.可选参数名称是标识此字符串的名称,仅用于错误消息.
DocTestRunner类
这是一个处理类,用于执行和验证DocTest中的交互式示例.其中定义了以下方法 :
report_start()
报告测试运行器即将处理给定示例.提供此方法是为了允许 DocTestRunner 的子类自定义其输出;它不应该直接调用
report_success()
报告给定的示例成功运行.提供此方法是为了允许DocTestRunner的子类自定义其输出;它不应该直接调用.
report_failure()
报告给定的示例失败.提供此方法是为了允许 DocTestRunner 的子类自定义其输出;它不应该直接调用.
report_unexpected_exception()
报告给定的示例引发了意外异常.提供此方法是为了允许 DocTestRunner 的子类自定义其输出;它不应该直接调用.
运行(测试)
运行 test 中的示例(一个DocTest对象) ,并使用编写器函数 out 显示结果.
汇总([详细])
打印摘要由此DocTestRunner运行的所有测试用例,并返回命名的元组 TestResults(失败,尝试).可选的详细参数控制摘要的详细程度.如果未指定详细程度,则使用DocTestRunner的详细程度.
OutputChecker类
此类用于检查实际输出来自doctest示例匹配预期输出.
此类中定义了以下方法 :
check_output()
如果示例( got )的实际输出与预期输出(想要)匹配,则返回 True .如果它们相同,则始终认为这些字符串匹配;但是,根据测试运行器使用的选项标记,也可以使用多种非精确匹配类型.有关选项标志的更多信息,请参阅选项标志和指令.
output_difference()
返回一个字符串,描述给定示例(示例)的预期输出与实际输出(得到)之间的差异.
DocTest与Unittest的集成
doctest模块提供了两个函数,可用于从包含doctests的模块和文本文件创建unittest测试套件.要与unittest测试发现集成,请在测试模块中包含load_tests()函数 :
import unittestimport doctestimport doctestexampledef load_tests(loader, tests, ignore): tests.addTests(doctest.DocTestSuite(doctestexample)) return tests
将形成来自unittest和doctest的组合TestSuite测试,现在可以通过unittest模块的main()方法或run()方法执行.
以下是从文本文件和带有doctests&minus的模块创建 unittest.TestSuite 实例的两个主要功能;
doctest.DocFileSuite( )
它用于将doctest测试从一个或多个文本文件转换为 unittest.TestSuite .返回的unittest.TestSuite将由unittest框架运行,并在每个文件中运行交互式示例.如果文件中的任何示例失败,则合成单元测试失败,并引发 failureException 异常,显示包含测试的文件的名称和(有时是近似的)行号.
doctest.DocTestSuite()
它用于将模块的doctest测试转换为 unittest.TestSuite .
返回的unittest.TestSuite将由unittest框架运行并运行模块中的每个doctest.如果任何doctests失败,则合成单元测试失败,并引发 failureException 异常,显示包含测试的文件的名称和(有时是近似的)行号
在幕后,DocTestSuite()从doctest.DocTestCase实例创建 unittest.TestSuite ,DocTestCase是unittest.TestCase的子类.
同样,DocFileSuite()从doctest.DocFileCase实例创建unittest.TestSuite,而DocFileCase是DocTestCase的子类.
因此,创建unittest.TestSuite的两种方式都运行实例DocTestCase.当您自己运行doctest函数时,可以通过将选项标志传递给doctest函数来直接控制正在使用的doctest选项.
但是,如果您正在编写单元测试框架,则unittest最终控制何时以及如何运行测试.框架作者通常希望控制doctest报告选项(可能,例如,由命令行选项指定),但是没有办法通过unittest将选项传递给doctest测试运行器.