2017-05-31 111 views
0

我与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

你是否捕捉到调用方法抛出的异常?你想达到什么目的? –

+0

当然,为了更简洁的代码,我只是省略了它。我有这样的框架,没有空间来重构它,只需要使它正常工作。 – milosdju

+1

所以,如果你正在捕获它,那么你应该得到由测试方法中的AssertionError引发的InvocationTargetException。既然你抓住了它,你的测试就通过了。 –

回答

2

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