在python unittest中打开一些打印件

时间:2011-12-15 09:46:27

标签: python unit-testing runner

我使用unittest并在每次测试后打印“。”,“E”或“F”表示“ok”,“error”和“fail”。我该如何关闭它?我使用Python 2.7,这些打印来自内置的跑步者类。 覆盖类听起来非常困难,因为它都是嵌套的。

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

3 个答案:

答案 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
...