【发布时间】:2020-03-10 23:32:30
【问题描述】:
在我的python包中,我使用标准模块logging创建日志,使用unittest创建单元测试。
由于包含单元测试的文件分布在包的整个文件夹结构中,我使用测试发现模式来执行单元测试:
python -m unittest discover \
--pattern "*_test.py" \
--start-directory "path/to/package/root"
不幸的是,这会导致控制台上的文本流混乱,因为来自单元测试运行器的日志消息和输出都被转发到stdout。
对于单个测试模块(我将其存储在单独的文件 <module_name>_test.py 中),我通常在 __main__-block 中全局控制日志输出:
# In <module_name>_test.py
import logging
import unittest
# ...
if __name__ == "__main__":
# Forward log messages into a file test.log.
logging.basicConfig(level=logging.DEBUG,
filename="testing/output/test.log")
unittest.main()
在执行python <module_name>_test.py 时,这可以确保日志消息与单元测试输出分开。
但是,在测试发现模式下,我的测试模块的 __main__-blocks 永远不会执行。因此我的问题是:如何在测试发现模式下全局设置日志记录?理想情况下,我只需要在一个地方配置记录器,而不是在所有测试模块中单独配置。这可能吗?
【问题讨论】:
标签: python unit-testing logging