【发布时间】:2014-02-20 20:35:33
【问题描述】:
有没有办法在 ITestListener 实现中,实际上使已经成功“通过”的测试失败?
我的用例是这样的:我在我的套件中运行所有测试,然后在套件结束时执行一些额外的操作。由于这些操作,我希望以前“通过”的测试现在被标记为失败。
在我的听众中(扩展 TestListenerAdapter),我正在打电话:
result.setStatus(ITestResult.FAILURE);
result.setThrowable(t);
在一些 ITestResult 对象上。在听众的其他地方,我已经像这样覆盖了onFinish:
@Override
public void onTestFailure(final ITestResult result) {
super.onTestFailure(result);
// TODO: This is updating the state of the test, but NOT causing it to fail
Reporter.setCurrentTestResult(result);
}
当我测试失败时,正在执行回调。 Throwable 被添加到测试结果中。一切都如我所愿。
但是,生成的报告和构建输出都不正确:
[testng] ===============================================
[testng] <redacted>Tests
[testng] Total tests run: 51, Failures: 0, Skips: 0
[testng] ===============================================
尽管这些测试结果中有 3 个被更新为失败:
有什么想法吗?
【问题讨论】:
-
我对TestNG的了解还不够,但是当你只是在监听器中抛出一个异常会发生什么?
-
从侦听器内部抛出异常“有效”,因为套件失败了,这基本上是我想要做的。我现在正在做的是累积如上所示的失败(及其原因),然后如果失败计数> 0,则抛出运行时异常。我只是担心这是一种棘手的方法,最终会如果我升级我的 TestNG 版本会中断。