我正在使用PyDev进行Python应用程序的开发和单元测试。 至于单元测试,一切工作都代表了内容记录到任何日志记录的事实。记录器不被PyDev的“捕获输出”捕获。PyDev单元测试:如何捕获记录到“捕获的输出”中的logging.Logger的文本
我已经着一切记录到这样的标准输出:
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
?
为了完整:我需要为所有单元测试进行重定向。对我来说最好的解决方案是在setUp-method中添加新的处理程序,并在tearDown方法中删除它。 – gecco
很好的回答,我[扩展](http://stackoverflow.com/a/15969985/321973)这是一个'__metaclass__',这样一个包装的'setUp'和'tearDown'自动包含这个 –
为什么添加/删除处理程序而不是将其保留在测试用例之外? – mlt