覆盖Python unittest打印结果的方式

时间:2016-02-13 17:18:10

标签: python unit-testing jython

我对unittest文档:TestResult, TestLoader,测试框架等完全感到困惑。

我只想调整打印测试运行的最终结果的方式。

我有一件事我需要做的事情:我实际上是在使用Jython,所以当一些代码引发ExecutionException时,我需要深入研究这个异常的原因(ExecutionException.getCause() )找到发生的“真实”异常,发生的地方等等。目前我正在获取引发此类异常的Future.get()的位置,以及来自原始异常的消息(没有位置) )。有用,但可以改进。

原则上不应该非常简单地找出负责输出测试结果的对象并覆盖某些方法,例如“print_result”......

此处还有另一个问题:Overriding Python Unit Test module for custom output? [code updated] ...这没有答案,虽然提问者在9个月前说过他已经“解决”了,但他没有提供答案。无论如何,对于希望稍微调整一下事情的不合理方式,它看起来非常复杂......是不是有一种简单的方法可以做到这一点?

稍后,回答MartinBroadhurst关于在运行期间记录的问题:

事实上,我可以费力地用try...except代替所有类型的代码,然后是文档函数......但如果我不这样做,任何意外的异常显然会被驱逐出去最终被测试框架捕获。

实际上我有一个我做过的装饰器,@vigil( is_EDT )(布尔参数),我用来装饰大多数方法和函数,其主要功能是检查装饰方法是否被调用在“正确的线程”(即EDT或非EDT线程)。这个可以扩展到捕获任何类型的异常......这是我以前做过的一个解决我这个问题的方法。然后打印出那里的异常细节,这很好:这些东西显然没有与unittest运行的结果同时打印出来,但它很有用。

但实际上我不应该以这种“制造和修补”的方式诉诸我的守夜功能!真的应该可以调整unittest类来覆盖异常的处理方式!最终,除非一些单位测试大师可以回答我的这个问题,否则我将不得不检查单元测试源代码并找到一种方法。

在我的previous question中,我询问了unittest.TestResult的几个不起作用的方法......但遗憾的是,这似乎没有像Python文档声明的那样实现。同样,刚刚进行的一些额外实验似乎表明存在更多错误消息:在python documentation page上进行单元测试时,他们似乎错误地记录了TestResult.startTest()stopTest()等:参数“{ {1}}“不应该存在(本文档中的约定似乎是省略test参数,并且每个方法都只采用self参数。”

简而言之,整个unittest模块令人惊讶地笨拙和狡猾...我很惊讶,因为我会认为其他人在比我更有影响力的位置会有变化......

0 个答案:

没有答案