【发布时间】:2020-12-24 07:32:42
【问题描述】:
我有一些代码似乎与 py.test 冲突,因为它会在 sys.stdout 中产生一些错误。它没有使我的测试失败,但它确实抱怨单元测试正在尝试写入已关闭的文件。当我删除流向标准输出的日志配置部分时,错误消失了。此外,如果我使用 unittest(这是实现原始代码的目的),则代码可以按预期工作,而不会过早关闭 stdout 流。暂时,我想根据测试运行器控制通过哪个日志记录配置。有没有办法让我检查运行时哪个测试运行程序正在运行测试以控制日志记录配置?在 C 语言中,我可以拥有可以被#ifdef 等宏禁用的代码部分。使用#ifdef 预处理器指令可以完全禁用这些语句,如下所示:
#ifdef MACRO
controlled text
#endif /* MACRO */
在 python 中执行类似操作的最佳方法是什么,特别是在运行 testrunner 时?
【问题讨论】:
-
这是否偶然干扰了
pytest的输出捕获 - 您可以在运行pytest -p no:capture -p no:logging时重现该问题吗?也许您可以尝试添加minimal reproducible example 屏蔽该问题?除此之外,还有PYTEST_CURRENT_TESTenv var,但正如您已经提到的,在生产代码中交付特定于测试的东西并不整洁。您也可以删除 autouse 夹具中的 stdout 处理程序,但 IMO 这也不是好的解决方案。 -
我注意到在 pytest 命令中使用
-s选项可以解决问题!
标签: python unit-testing macros runtime pytest