Testng 检查@AfterMethod中的软断言

Testng 检查@AfterMethod中的软断言,testng,Testng,我想使用@AfterMethod检查TestNG中的软断言。我想这样做: SoftAssert sa; @BeforeMethod(alwaysRun=true) public void beforeMethod() { sa = new SoftAssert(); } @Test public void test1() { sa.assertTrue(false); } @Test public void test2() { sa.assertTrue(false

我想使用
@AfterMethod
检查TestNG中的软断言。我想这样做:

SoftAssert sa;

@BeforeMethod(alwaysRun=true)
public void beforeMethod() {
    sa = new SoftAssert();
}

@Test
public void test1() {
    sa.assertTrue(false);
}

@Test
public void test2() {
    sa.assertTrue(false);
}

@AfterMethod(alwaysRun = true)
public void afterMethod() {
    sa.assertAll();
}
问题是TestNG将此标记为1个测试通过,1个配置失败:

默认测试
测试运行:2,失败:0,跳过:1
配置失败:2,跳过:1

如何告诉TestNG此测试失败?我想使用
@AfterMethod
,这样如果我忘记在测试结束时放置
sa.assertAll()
,我就不必担心误报了。

您可以尝试:

@AfterMethod(alwaysRun = true)
public void afterMethod(ITestResult result) {
    try {
        sa.assertAll();
    } catch(Throwable t) {
        result.setStatus(FAILURE);
        result.setThrowable(t);
    }
}
您可以尝试:

@AfterMethod(alwaysRun = true)
public void afterMethod(ITestResult result) {
    try {
        sa.assertAll();
    } catch(Throwable t) {
        result.setStatus(FAILURE);
        result.setThrowable(t);
    }
}

为什么要这样做?所以它在测试结果中显示为测试失败,而不是配置失败OK,但您的a不应该这样做。断言应该是@Test方法的一部分@之前/之后有常见的测试设置和/或测试清理。但如果您执行软断言,然后忘记调用assertAll方法,则很容易出错。在这种情况下,不要使用软断言,而是使用Assert;)为什么要这样做?所以它在测试结果中显示为测试失败,而不是配置失败OK,但您的a不应该这样做。断言应该是@Test方法的一部分@之前/之后有常见的测试设置和/或测试清理。但如果您执行软断言,然后忘记调用assertAll方法,则很容易出错。在这种情况下,不要使用软断言,而是使用Assert;)