过滤掉unittest输出中的异常消息

时间:2014-10-21 06:26:45

标签: python python-unittest output-formatting

是否可以废弃使用unittest输出的所有异常文本?

即,如果我有一堆测试,并且其中一些测试会抛出异常,unittest模块会将其自身打印为红色(至少在IDLE中)所有异常。有没有办法不打印例外(但是留在我使用print关键字打印的任何文字中?

例如,我有一个要在tearDownClass()函数中打印的文本,虽然我想要打印,但如果没有30行红色异常文本,那就太好了。这可能吗?

2 个答案:

答案 0 :(得分:1)

如果我理解你的话,你只需要一个自定义的记录器,对吗?

将所有单元测试放在try-except块中并捕获所有异常。然后根据需要打印出来。

...
try:
    def test1(unit.tests):
        pass
    def test2(unit.tests):
        pass
except Exception, e:
    print 'here is the exception message', repr(e)
    # Use your own function to deal with print function or whatever you want here

...

答案 1 :(得分:0)

所以,根据comment-41597224,你想故意擦除有用的输出,因为你觉得它不是你的问题。

在这种情况下,请替换/对Lib\unittest\result.py:_exc_info_to_string或使用适用于您的具体案例的方法(可能是addErroraddFailure)进行相关更改。

或者,您可以将输出通过管道输出到一个独立的脚本/命令,该脚本/命令将使用正则表达式对其进行后处理。

  • 如果在stdout的例外情况下将结果写入stderr,则在命令行中就像2>nul一样简单。

但是,我仍然建议不要这样做。你确实关心你得到的例外,因为:

  • 他们可能会因为你的错误以及学生的错误而被证实
  • 您可以使用逐字输出回复,而不仅仅是"通过/失败"这对你来说不那么重要,给失败者更好的解决方法

如果你做到这一点,你就可以获得两全其美的效果,这样你就可以得到(过滤的)摘要,并且如果你怀疑某些事情不对,就有机会看到完整的输出。