如何在Python 3.8 doctest测试中获取verbose标志?
在Python 3.8的doctest测试中获取verbose标志
要在doctest的测试代码内部拿到verbose状态,你可以通过以下两种方式实现:
方法一:自定义DocTestRunner传递verbose值(推荐)
自己实现一个DocTestRunner的子类,在初始化时把verbose值存到模块级别的变量里,这样测试代码就能直接访问。这种方式不依赖doctest的内部私有逻辑,稳定性更高。
示例代码:
# 模块级变量,用来存储当前的verbose状态 _doctor_verbose = False class CustomDocTestRunner(doctest.DocTestRunner): def __init__(self, verbose=False, **kwargs): global _doctor_verbose _doctor_verbose = verbose super().__init__(verbose=verbose, **kwargs) class MyClass: """ >>> if _doctor_verbose: ... print("Verbose模式已开启,输出自定义内容") """ pass if __name__ == '__main__': import doctest some_condition = True # 替换成你的实际判断条件 # 用自定义Runner执行测试 res = doctest.testmod(runner=CustomDocTestRunner(verbose=some_condition))
方法二:利用doctest内部的master实例(不推荐)
Python 3.8的doctest里有个私有属性doctest.master,指向当前运行的DocTestRunner实例,你可以直接读取它的_verbose属性。但这属于内部实现细节,未来版本可能会变动,不建议长期使用。
示例代码:
class MyClass: """ >>> import doctest >>> if hasattr(doctest, 'master') and doctest.master._verbose: ... print("Verbose模式已开启") """ pass if __name__ == '__main__': import doctest some_condition = True res = doctest.testmod(verbose=some_condition)
注意事项
- 优先选择方法一,避免依赖doctest的私有API,保证代码兼容性。
- 不要随意修改DocTestRunner的内部属性,防止破坏doctest的原有运行逻辑。
内容的提问来源于stack exchange,提问作者brewmanz
相关产品推荐
相关产品推荐

