SoftAssert 正在从其他测试中提取结果

Але*_*кий 1 java testng selenium

当我这样做时.assertAll()SoftAssert会从其他测试中提取结果。

例子:

public SoftAssert softAssert = new SoftAssert();

@Test(priority = 1)
public void newTest1() {
    softAssert.assertTrue(false, "test1");
    softAssert.assertAll();
}

@Test(priority = 2)
public void newTest2() {
    softAssert.assertTrue(false, "test2");
    softAssert.assertAll();
}
Run Code Online (Sandbox Code Playgroud)

newTest1测试结果:

java.lang.AssertionError: The following asserts failed:
test1 expected [true] but found [false]`
Run Code Online (Sandbox Code Playgroud)

newTest2测试结果:

java.lang.AssertionError: The following asserts failed:
test1 expected [true] but found [false],
test2 expected [true] but found [false]`
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

testng.version   == 6.9.10
selenium.version == 2.53.1
java.version     == 1.8.0_65-b17
Run Code Online (Sandbox Code Playgroud)

Aar*_*vis 5

与 JUnit 不同,TestNG 不会创建测试类的新实例。因此,如果将 SoftAssert 直接保存在测试类上,则两个测试方法都将使用相同的 SoftAssert 实例。inside使用测试方法实例化 SoftAsset或使用配置方法对其进行初始化,例如:

public SoftAssert softAssert;

@BeforeMethod
public void setup() {
    softAssert = new SoftAssert();
}

@AfterMethod
public void tearDown() {
    softAssert = null;
}

// ...
Run Code Online (Sandbox Code Playgroud)

不过要小心。一般来说,对于 TestNG,我发现最好不要测试类对象上保存任何状态,因为如果您想并行运行方法,就会出现争用。在这种情况下,要么查看 TestNG 参数注入,要么更详细:

@Test
public void test1() {
    SoftAssert softAssert = new SoftAssert();
    // ...
}

@Test
public void test2() {
    SoftAssert softAssert = new SoftAssert();
    // ...
}
Run Code Online (Sandbox Code Playgroud)