我对此question中提到的问题有同样的问题,但我会用代码示例来覆盖它,有人可以回答它。
事情是我有2个班级。其中一个包含@Test
方法,该方法调用validation
所有断言都放在其中。当通过反射调用validation
方法时会出现问题,如下所示:
public class TestClass {
@Test
public void test() {
BaseValidation baseValidation = new BaseValidation();
baseValidation.validateAll();
}
}
public class BaseValidation {
public void validateAll() {
for (Method method : this.getClass().getDeclaredMethods()) {
method.invoke(new ValidationClass(), null);
}
}
}
public class ValidationClass extends BaseValidation {
public void validate() {
Assert.fail("some message");
}
}
在这种情况下,即使验证方法中的断言失败,整体测试也会传递。怎么解决?如果我不使用反射:
@Test
public void test() {
ValidationClass validationClass = new ValidationClass();
validationClass.validate(); // NOT USING REFLECTION
}
它会起作用,但那不是我想要的。
答案 0 :(得分:2)
如果要在调用调用中捕获异常,那么您应该获得InvocationTargetException,它将由测试方法中的AssertionError引发。因为你正在捕捉它,你的测试通过了。抛出它或获取路由导致将测试标记为失败。