我正在使用PyDev进行Python应用程序的开发和单元测试.至于单元测试,一切都很好,除了没有内容记录到日志框架.PyDev的"捕获输出"未捕获记录器.
我已经将所有记录到标准输出的内容转发如下:
import sys
logger = logging.getLogger()
logger.level = logging.DEBUG
logger.addHandler(logging.StreamHandler(sys.stdout))
Run Code Online (Sandbox Code Playgroud)
然而,"捕获的输出"不会显示记录到记录器的东西.
这是一个示例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")
Run Code Online (Sandbox Code Playgroud)
控制台输出是:
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
Run Code Online (Sandbox Code Playgroud)
但是测试的CAPTURED OUTPUT是:
======================== CAPTURED OUTPUT =========================
AA
Run Code Online (Sandbox Code Playgroud)
有人知道如何捕获logging.Logger在执行此测试期间记录到的所有内容吗?
在调试单元测试时(通过pycharm测试运行器),可以打开交互式命令行,但(与调试常规脚本时不同)输入的命令不会产生任何输出.事实上,似乎stdout被捕获到某处,因为stderr按预期工作:
>>> print "a"
>>> import sys
>>> sys.stderr.write("moof")
moof
>>> sys.stdout.write("moof")
>>> sys.stderr.write("test")
test
Run Code Online (Sandbox Code Playgroud)
这是预期的行为吗?我真的很喜欢交互式调试控制台,如果它在调试单元测试时表现良好也会很棒.
我确定这是一个简单的修复,但我想在运行单元测试时在PyCharm控制台中查看日志消息.我正在测试的模块有自己的记录器,通常我会设置一个根记录器来捕获某个级别的调试消息,并将其他日志传递给一个文件.但我无法弄清楚它如何与单元测试一起工作.
我正在使用unittest2模块,并使用PyCharm的自动测试发现(可能是基于鼻子,但我不知道).
我试过愚弄运行配置,但似乎没有一种简单的方法来做到这一点.
如果你们中的任何人在那里工作,那么PyCharm文档在这里也没有特别的帮助.
在编辑中:它似乎表明控制台捕获了关键级别的日志消息.我想知道是否有办法配置它来捕获调试级别的消息.
这篇文章(Pycharm单元测试交互式调试命令行不起作用)建议将-s选项添加到构建配置,这不会产生所需的结果.