如何解决PyDev单元测试:如何捕获记录到日志中的文本“捕获的输出”中的记录器
问题是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)
解决方法
我正在使用PyDev进行Python应用程序的开发和单元测试。至于单元测试,除了没有内容记录到日志记录框架这一事实之外,一切都可以正常工作。记录器未被PyDev的“捕获的输出”捕获。
我已经将记录的所有内容转发到标准输出,如下所示:
import sys
logger = logging.getLogger()
logger.level = logging.DEBUG
logger.addHandler(logging.StreamHandler(sys.stdout))
但是,“捕获的输出”不会显示记录到记录器的内容。
这是一个示例unittest-script: 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 =========================
AA
有人知道如何捕获logging.Logger
执行此测试期间记录到的所有内容吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。