使用unittest进行测试,它会在每次测试完成后为“ok”,“error”和“fail”打印“。”,“E”或“F”。我如何关闭它?我使用Python 2.7,这些打印来自内置的亚军类。 覆盖这些类听起来非常困难,因为它们都是嵌套的。在python unittest中打开一些打印
编辑: 我只想脱掉字符E。和F,因为它们不会与我测试中的其他日志同时出现。
使用unittest进行测试,它会在每次测试完成后为“ok”,“error”和“fail”打印“。”,“E”或“F”。我如何关闭它?我使用Python 2.7,这些打印来自内置的亚军类。 覆盖这些类听起来非常困难,因为它们都是嵌套的。在python unittest中打开一些打印
编辑: 我只想脱掉字符E。和F,因为它们不会与我测试中的其他日志同时出现。
,取决于您所使用的单元测试框架(标准,鼻子......),你有多个方法来减少冗长:
python -m unittest -h
...
-q, --quiet Minimal output
...
的unittest
输出写入标准错误流,它你可以管别的地方。在* nix框,这将有可能是这样的:
python -m unittest some_module 2> /dev/null
在Windows中,这应该是这样的(感谢卡尔Knechtel):
python -m unittest some_module 2> NUL
如果运行的Python测试,你可以简单地更换stderr
流这样的:
import sys, os
sys.stderr = open(os.devnull, 'w')
... # do your testing here
sys.stderr = sys.__stderr__ # if you still need the stderr stream
由于您只是要关闭。,F,E符号的更新,因此您也可以通过覆盖默认的类来创建自己的TestResult
类。在我的情况(Python 2.6中),这将是这样的:
import unittest
class MyTestResult(unittest._TextTestResult):
def addSuccess(self, test):
TestResult.addSuccess(self, test)
def addError(self, test, err):
TestResult.addError(self, test, err)
def addFailure(self, test, err):
TestResult.addFailure(self, test, err)
这有效地关闭了字符的打印,但保持默认功能。
现在我们还需要一个新的TestRunner
类和重写_makeResult
方法:
class MyTestRunner(unittest.TextTestRunner):
def _makeResult(self):
return MyTestResult(self.stream, self.descriptions, self.verbosity)
有了这个亚军你现在可以享受一个日志免费检测。
只是说明:不幸的是,从命令行不可能这样做。
有点迟到的反应,但有人可能会觉得它有用。 你可以转动。 E和F关闭的详细级别设置为0:
testRunner = unittest.TextTestRunner(verbosity = 0)
你仍然会有最终结果,并在在标准错误的测试结束时可能出现的错误/异常。
在Python 2.4和2.7中测试。
你为什么要这样做?当然,看到测试的进展很有帮助吗? – 2011-12-15 09:47:57
在我的情况下,它增加了混淆,因为我的测试并行运行,我打印1条日志消息,并且这些测试日志消息未与相应的“E”“F”或“。”同步。 。 – swan 2011-12-15 17:12:39
如何在分离输出流的独立进程中运行这些测试? – 2013-02-06 14:03:32