我正在使用 unittest,它会在每次测试后为“ok”、“error”和“fail”打印“.”、“E”或“F”。如何关闭它?我使用的是 Python 2.7,这些打印来自内置的 runner 类。覆盖这些类听起来非常困难,因为它们都是嵌套的。
编辑:我只想去掉字符 E 。和 F,因为它们不会与我的测试中的其他日志同时出现。
我正在使用 unittest,它会在每次测试后为“ok”、“error”和“fail”打印“.”、“E”或“F”。如何关闭它?我使用的是 Python 2.7,这些打印来自内置的 runner 类。覆盖这些类听起来非常困难,因为它们都是嵌套的。
编辑:我只想去掉字符 E 。和 F,因为它们不会与我的测试中的其他日志同时出现。
的输出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)
有了这个跑步者,您现在可以享受无日志测试。
请注意:不幸的是,这在命令行中是不可能的。
回复有点晚,但有人可能会觉得它很有用。你可以转。通过将详细级别设置为 0 来关闭 E 和 F:
testRunner = unittest.TextTestRunner( verbosity = 0 )
在 stderr 中的测试结束时,您仍然会有最终结果和可能的错误/异常。
在 Python 2.4 和 2.7 中测试。
根据您使用的单元测试框架(标准,鼻子......),您有多种方法来减少冗长:
python -m unittest -h
...
-q, --quiet Minimal output
...