是否可以废弃使用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
或使用它的方法进行相关更改,该方法适用于您的特定情况(可能是addError
或addFailure
)。
或者,您可以将输出通过管道传输到一个独立的脚本/命令,该脚本/命令将使用正则表达式对其进行后处理。
- 如果结果恰好写入
stdout
,而stderr
发生异常,那么在命令行中,这就像2>nul
一样简单
但是,我仍然建议不要这样做。你确实关心你会得到什么例外,因为:
- 它们可能是你和学生的错误造成的
- 您可以使用逐字逐句的输出进行回复,而不仅仅是"通过/失败",这不仅减少了您的工作量,而且为失败者提供了更好的修复提示
如果你做到了,你可以两全其美,这样你既可以得到(过滤的)摘要,也可以在你怀疑有什么不对的时候看到完整的输出。