gpt4 book ai didi

python - 在 python unittest 中关闭一些打印

转载 作者:太空狗 更新时间:2023-10-29 21:18:58 25 4
gpt4 key购买 nike

我正在使用 unittest,它会在每次测试后打印“.”、“E”或“F”来表示“ok”、“error”和“fail”。我该如何关闭它?我使用的是 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)

有了这个运行者,您现在可以享受无日志测试。

请注意:不幸的是,这在命令行中是不可能的。

关于python - 在 python unittest 中关闭一些打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8518043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com