2017-05-31 113 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。既然你抓住了它,你的測試就通過了。要麼扔掉它,要麼得到路線原因以將測試標記爲失敗。