采访中有人问我这个问题。我回答了这个问题,因为第一个测试将失败,第二个将通过。
但是令我惊讶的是,我想出了一个聪明的主意。我可以看到两者都失败了。
对于第二次测试,预期值显示为“值”。不知道为什么吗?
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/