即使断言失败,测试也不会失败

Test is not failing even though assertion has failed

我遇到了与此 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
}

它会起作用,但这不是我想要的。

如果您在 invoke 调用中捕获异常,那么您应该得到 InvocationTargetException,它会由测试方法中的 AssertionError 引发。既然你抓住了它,你的测试就通过了。抛出它或获取路由原因以将测试标记为失败。