Testng 软断言没有按预期工作

Testng soft assertion doesn't wrok as expected

我在面试中被问到这个testng问题。我回答这个问题是因为第一个测试会失败,第二个会通过。 但令我惊讶的是,当我 运行 在一个智能想法中。我可以看到两者都失败了。

对于第二次测试,预期值显示为 "values"。不明白为什么?

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 创建为 class 成员,因此这两个测试都在同一个实例上运行,并且您在同一个对象中积累了软断言。当您在第二个测试中调用 assertAll() 时,第一个失败的断言已被收集。现在我们开始。

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

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