虽然断言失败,但测试并未失败
问题描述:
我与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调用中的异常,那么您应该获取由测试方法中的AssertionError引发的InvocationTargetException。既然你抓住了它,你的测试就通过了。要么扔掉它,要么得到路线原因以将测试标记为失败。
你是否捕捉到调用方法抛出的异常?你想达到什么目的? –
当然,为了更简洁的代码,我只是省略了它。我有这样的框架,没有空间来重构它,只需要使它正常工作。 – milosdju
所以,如果你正在捕获它,那么你应该得到由测试方法中的AssertionError引发的InvocationTargetException。既然你抓住了它,你的测试就通过了。 –