在python unittes中关闭一些打印

2024-05-21 01:37:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用unittest,它会在每次测试后打印“.”、“E”或“F”表示“好”、“错误”和“失败”。我该怎么关掉它?我使用Python2.7,这些打印来自内置的runner类。 重写这些类听起来很困难,因为它们都是嵌套的。

编辑: 我只想把角色E去掉。和F,因为它们不会与我的测试中的其他日志同时出现。


Tags: 角色编辑错误unittest内置runner
3条回答

根据您正在使用的unittest框架(标准、nose…),有多种方法可以减少详细程度:

python -m unittest -h
...
-q, --quiet      Minimal output
...

unittest的输出被写入标准错误流,您可以在其他地方对其进行管道传输。在*nix框中,可能是这样:

python -m unittest some_module 2> /dev/null

在窗户上,这个应该是这样的(谢谢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类来创建自己的TestResult类。在我的例子(Python2.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中的测试结束时,仍然会有最终结果和可能的错误/异常。

在Python2.4和2.7中测试。

相关问题 更多 >