我有一个定制的报告和断言解决方案,这正是我希望它的工作方式,但是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
}在测试方法结束时,我确认状态设置为失败。但是,当它到达My@AfterTest时,由于某种原因,它不再被设置为失败,而是设置为通过。这里有什么简单的东西吗?是否有一种简单的方法简单地将测试标记为失败?我已经研究过用失败来制造一个softAssert,但这确实很简陋,也不太理想。
发布于 2018-10-11 16:51:30
我对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);我还删除了堆栈跟踪,因为它只是指向我的断言的位置,而且没有帮助。
https://stackoverflow.com/questions/52711239
复制相似问题