关于TestNG执行

时间:2018-01-03 18:55:59

标签: testng

高层: 我有一个带有assert语句的@Test方法A和最后的assertAll()。 在这个方法A中,我正在调用另一个方法B,它在结尾处有断言语句和assertAll()。

当前问题: 如果任何assert语句在被调用的方法B中失败,我可以在控制台中看到断言错误,这很好。 但是调用方法A中的其余语句没有被执行。

示例...

public class class1 
{
    @Test
    public void test1() throws Exception
    {
    class2 obj = new class2();
    SoftAssert sassert = new SoftAssert();
    sassert.assertNotNull("123", "Failed, It is null");
    obj.test2();
    sassert.assertNotNull("3456", "Failed, It is null");            
    sassert.assertAll();

    }

}

public class class2 
{

    public void test2() throws Exception
    {

    SoftAssert sassert = new SoftAssert();
    sassert.assertNotNull("111", "Failed, It is null");
    sassert.assertNotNull("222", "Failed, It is null");         
    sassert.assertAll();

    }

}

1 个答案:

答案 0 :(得分:0)

无论您在何处调用assertAll(),此方法调用都会遍历通过assertXXX()方法收集的所有断言。所以你所看到的是预期的行为。

因此,如果您的class2.test2() 一个@Test方法,那么您可以将代码重构为如下所示:

public class class1 {
    @Test
    public void test1() throws Exception {
        SoftAssert sassert = new SoftAssert();
        class2 obj = new class2(sassert);
        sassert.assertNotNull("123", "Failed, It is null");obj.test2();
        sassert.assertNotNull("3456", "Failed, It is null");            
        sassert.assertAll();
    }
}

public class class2 {
    public void test2(SoftAssert sassert) throws Exception {
        sassert.assertNotNull("111", "Failed, It is null");
        sassert.assertNotNull("222", "Failed, It is null");
    }
}

正如您在上面的示例中所看到的,class2.test2()接受一个SoftAssert对象,在该对象上添加更多断言但尚未完成断言。 class2.test2()的调用者有责任这样做。