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

标签 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

有什么想法吗?

最佳答案

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

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

关于testing - 如何在监听器中使 TestNG 测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21918966/

相关文章:

android - 使用 Appium 自动化 Android 上的移动浏览器

java - 从子类外部访问父类的 protected 方法(使用反射或任何可行的方法)

java - 在 JUnit 切换到 TestNG 后我的测试不起作用

testng - 如何在 TestNG 测试类中使用 @Factory 注释和 @Guice

java - 如何使用 junit 或 testng 为 Queue 接口(interface)类创建简单的单元测试?

java - Spring 测试事务注释不起作用

reactjs - Cypress react cy.visit() 任何不是索引的 url

python - 在 Pytest 断言中覆盖标准断言消息传递

java - 如何使用 jQuery 通过 Java 单击 Selenium WebDriver 中的按钮

java - 配置失败导致 TestNG 中的测试跳过且 XML 中没有信息