从单元测试输出中筛选出异常消息



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

也就是说,如果我有一堆测试,其中一些测试抛出异常,unittest模块会自行将所有异常打印为红色(至少在IDLE中)。有没有一种方法可以不打印异常(而是在我使用print关键字打印的任何文本中留下?

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

如果我理解得对,你只想要一个自定义的记录器,对吧?

将所有单元测试放在一个位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
...

因此,根据comment-41597224,您希望故意擦除有用的输出,因为您觉得这不是您的问题。

在这种情况下,请替换/对Libunittestresult.py:_exc_info_to_string或使用它的方法进行相关更改,该方法适用于您的特定情况(可能是addErroraddFailure)。

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

  • 如果结果恰好写入stdout,而stderr发生异常,那么在命令行中,这就像2>nul一样简单

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

  • 它们可能是你和学生的错误造成的
  • 您可以使用逐字逐句的输出进行回复,而不仅仅是"通过/失败",这不仅减少了您的工作量,而且为失败者提供了更好的修复提示

如果你做到了,你可以两全其美,这样你既可以得到(过滤的)摘要,也可以在你怀疑有什么不对的时候看到完整的输出。

相关内容

  • 没有找到相关文章

最新更新