如何在监听器中使TestNG测试失败

时间:2014-02-20 20:35:34

标签: testing testng

有没有办法从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个测试结果正在更新为失败:

Nonsensical report output

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我使用IInvokedMethodListener使用此approach将状态从FAILURE更改为SKIP已成功。

在整个测试套件完成后但在每个测试方法之后,将不会调用afterInvocation方法,其中状态可以更改。