2

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

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

例如,我在tearDownClass()函数中有要打印的文本,虽然我想打印它,但如果它后面没有 30 行红色异常文本会很好。这可能吗?

4

2 回答 2

1

If I understand you right, you just want a self-defined logger, right?

Put all the unit tests in a bit try-except block and catch all the exceptions. Then print it out as you like.

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

...
于 2014-10-21T06:33:04.567 回答
0

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

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

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

  • 如果结果碰巧被写入stdoutwhile 异常stderr,它就像2>nul在命令行中一样简单。

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

  • 它们可能是您的错误以及学生的错误的结果
  • 你可以用逐字输出来回复,而不仅仅是“通过/失败”,这对你来说工作量更少,而且给失败者一个更好的提示来修复它

如果您做到这一点,您可以获得两全其美的结果,这样您既可以获得(过滤的)摘要,也有机会在您怀疑某些事情不正确时查看完整输出。

于 2014-10-21T10:08:48.610 回答