采访中有人问我这个问题。我回答了这个问题,因为第一个测试将失败,第二个将通过。
但是令我惊讶的是,我想出了一个聪明的主意。我可以看到两者都失败了。

对于第二次测试,预期值显示为“值”。不知道为什么吗?

import org.testng.annotations.Test;
import org.testng.annotations.SoftAssert;

public class SoftAssertion{

SoftAssert softAssert = new SoftAssert();

@Test
public void first(){
 softAssert.assertEquals("values", "value");
 softAssert.assertAll();
}

@Test
public void second(){
 softAssert.assertEquals("value", "value");
 softAssert.assertAll();
}

}


我正在使用testng 7.1.0

Test Run Result

最佳答案

您将SoftAssert创建为类成员,因此两个测试都在同一实例上运行,并且在同一对象中累积了软断言。在第二个测试中调用assertAll()时,第一个失败的断言已经收集。现在我们开始。

因此,在对象级别创建SoftAssert实例是错误的。应该在一个方法中创建它。

但是,仍然存在一个可能的副作用:TestNG不保证测试方法的执行顺序,因此,如果先执行second()测试,您将看到一个失败并通过了测试。

关于java - Testng软断言无法按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61634075/

10-09 01:57