2024-05-21 01:37:56 发布
网友
我使用unittest,它会在每次测试后打印“.”、“E”或“F”表示“好”、“错误”和“失败”。我该怎么关掉它?我使用Python2.7,这些打印来自内置的runner类。 重写这些类听起来很困难,因为它们都是嵌套的。
编辑: 我只想把角色E去掉。和F,因为它们不会与我的测试中的其他日志同时出现。
根据您正在使用的unittest框架(标准、nose…),有多种方法可以减少详细程度:
python -m unittest -h ... -q, --quiet Minimal output ...
unittest的输出被写入标准错误流,您可以在其他地方对其进行管道传输。在*nix框中,可能是这样:
unittest
python -m unittest some_module 2> /dev/null
在窗户上,这个应该是这样的(谢谢Karl Knechtel):
python -m unittest some_module 2> NUL
如果从python运行测试,您可以简单地替换stderr流,如下所示:
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)中,如下所示:
TestResult
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方法:
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中测试。
根据您正在使用的unittest框架(标准、nose…),有多种方法可以减少详细程度:
unittest
的输出被写入标准错误流,您可以在其他地方对其进行管道传输。在*nix框中,可能是这样:在窗户上,这个应该是这样的(谢谢Karl Knechtel):
如果从python运行测试,您可以简单地替换
stderr
流,如下所示:因为您只想关闭.F,E符号的更新,所以还可以通过重写默认的
TestResult
类来创建自己的TestResult
类。在我的例子(Python2.6)中,如下所示:这样可以有效地关闭字符的打印,但保留默认功能。
现在我们还需要一个新的
TestRunner
类并重写_makeResult
方法:有了这个跑步者,你现在可以享受无日志测试了。
请注意:不幸的是,这在命令行中是不可能的。
反应有点晚,但有人可能会觉得有用。 你可以转身。通过将“详细级别”设置为0关闭E和F:
在stderr中的测试结束时,仍然会有最终结果和可能的错误/异常。
在Python2.4和2.7中测试。
相关问题 更多 >
编程相关推荐