gpt4 book ai didi

python - PyDev 单元测试 : How to capture text logged to a logging. 记录器在 "Captured Output"

转载 作者:IT老高 更新时间:2023-10-28 20:30:47 27 4
gpt4 key购买 nike

我正在使用 PyDev 对我的 Python 应用程序进行开发和单元测试。至于单元测试,除了没有内容被记录到日志框架之外,一切都很好。 PyDev 的“捕获的输出”没有捕获记录器。

我已经将记录的所有内容转发到标准输出,如下所示:

import sys
logger = logging.getLogger()
logger.level = logging.DEBUG
logger.addHandler(logging.StreamHandler(sys.stdout))

尽管如此,“捕获的输出”不显示记录到记录器的内容。

这是一个单元测试脚本示例:test.py

import sys
import unittest
import logging

logger = logging.getLogger()
logger.level = logging.DEBUG
logger.addHandler(logging.StreamHandler(sys.stdout))

class TestCase(unittest.TestCase):
def testSimpleMsg(self):
print("AA")
logging.getLogger().info("BB")

控制台输出为:

Finding files... done.
Importing test modules ... done.

testSimpleMsg (itf.lowlevel.tests.hl7.TestCase) ... AA
2011-09-19 16:48:00,755 - root - INFO - BB
BB
ok

----------------------------------------------------------------------
Ran 1 test in 0.001s

OK

但是测试的CAPTURED OUTPUT是:

======================== CAPTURED OUTPUT =========================
AA

有人知道如何在执行此测试期间捕获记录到 logging.Logger 的所有内容吗?

最佳答案

问题是 unittest 运行器在测试开始之前替换了 sys.stdout/sys.stderr,而 StreamHandler 仍在写入原始 sys.stdout

如果您将“当前”sys.stdout 分配给处理程序,它应该可以工作(参见下面的代码)。

import sys
import unittest
import logging

logger = logging.getLogger()
logger.level = logging.DEBUG
stream_handler = logging.StreamHandler(sys.stdout)
logger.addHandler(stream_handler)

class TestCase(unittest.TestCase):
def testSimpleMsg(self):
stream_handler.stream = sys.stdout
print("AA")
logging.getLogger().info("BB")

虽然,更好的方法是在测试期间添加/删除处理程序:

import sys
import unittest
import logging

logger = logging.getLogger()
logger.level = logging.DEBUG

class TestCase(unittest.TestCase):
def testSimpleMsg(self):
stream_handler = logging.StreamHandler(sys.stdout)
logger.addHandler(stream_handler)
try:
print("AA")
logging.getLogger().info("BB")
finally:
logger.removeHandler(stream_handler)

关于python - PyDev 单元测试 : How to capture text logged to a logging. 记录器在 "Captured Output",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7472863/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com