我使用unittest并在每次测试后打印“。”,“E”或“F”表示“ok”,“error”和“fail”。我该如何关闭它?我使用Python 2.7,这些打印来自内置的跑步者类。 覆盖类听起来非常困难,因为它都是嵌套的。
编辑: 我只想脱掉角色E.和F因为它们与我的测试中的其他日志不同时出现。
答案 0 :(得分:10)
unittest
的输出被写入标准错误流,您可以将其输出到其他地方。在* nix框中,这可能是这样的:
python -m unittest some_module 2> /dev/null
在Windows上,这应该是这样的(感谢Karl 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)
有了这个跑步者,您现在可以享受无日志测试。
请注意:不幸的是,命令行无法实现这一点。
答案 1 :(得分:6)
有点迟到的反应,但有人可能会发现它很有用。 你可以转。通过将详细级别设置为0来关闭E和F:
testRunner = unittest.TextTestRunner( verbosity = 0 )
在stderr的测试结束时,您仍然会得到最终结果和可能的错误/异常。
在Python 2.4和2.7中测试。
答案 2 :(得分:1)
根据您正在使用的单元测试框架(标准,鼻子......),您有多种方法可以减少冗长:
python -m unittest -h
...
-q, --quiet Minimal output
...