TestNG设置测试状态

时间:2018-10-08 23:13:58

标签: java testing testng

我有一个自定义报告和断言解决方案,该解决方案可以按照我想要的方式正常工作,但是gradle不能正确地将测试标记为失败。对我而言,最简单的解决方案是,只要解决我的断言,就将测试标记为testNG失败,因此它将在gradle中将其标记为失败。我已使用以下方法设置了测试状态:

Reporter.getCurrentTestResult().setStatus(ITestResult.FAILURE);

但是@Test方法结束后它将恢复

@Test
public void assertionsFail(){
  //Custom assertion fails
  generalAssertion(new AssertionPayload(false));
  //Let testNG know that test failed
  Reporter.getCurrentTestResult().setStatus(ITestResult.FAILURE);
  //Marked as failed here, Reporter.getCurrentTestResult() returns 2
}

@AfterMethod(alwaysRun = true)
public void afterTest(ITestResult testResult) {
  //Why is it marked as passed here? Reporter.getCurrentTestResult() returns 1

}

在测试方法结束时,我确认状态设置为失败。但是,当它到达我的@AfterTest时,由于某种原因,它不再设置为失败,而是设置为通过。我在这里缺少简单的东西吗?是否有简单的方法将测试标记为失败?我一直在考虑使softAssert失败,但这确实很不稳定而且不理想。

1 个答案:

答案 0 :(得分:0)

我已经深入研究了testNG的代码,并了解到在测试完成之后setStatus被调用了几次。如果有任何可抛出的东西,testNG似乎会读取,然后相应地设置状态。通过执行此操作,我可以得到所需的行为:

        Throwable throwable = new Throwable("One or more tests in this group has failed");
        throwable.setStackTrace(new StackTraceElement[0]);
        Reporter.getCurrentTestResult().setThrowable(throwable);

我也删除了堆栈跟踪,因为它只是指向我的断言的位置,对您没有帮助