高层: 我有一个带有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();
}
}
答案 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()
的调用者有责任这样做。