【问题标题】:How can I fail a TestNG test within a listener如何在侦听器中失败 TestNG 测试
【发布时间】: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 版本会中断。

标签: testing testng


【解决方案1】:

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

afterInvocation 方法,状态可以改变,不会在整个测试套件完成后调用,而是在每个测试方法后调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    相关资源
    最近更新 更多