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)
有了这个跑步者,您现在可以享受无日志测试。
请注意:很遗憾,这在命令行中是不可能的。