2
我使用JUnit 4的Mockito,我想存根方法調用,以便它拋出一個異常:打樁檢查異常:如何處理異常
doThrow(MyException.class).when(myObject).foo();
的問題是,MyException是檢查異常,所以在這個語句中調用foo()
會導致編譯器抱怨我必須處理異常或向我的方法添加一個throws子句。
所以我想知道什麼正確的方法來處理這種情況是?我的想法到目前爲止:
- 我使用它錯了,還有更好的方法來做到這一點。
- 我剛添加
throws MyException
到測試方法 - 我提取呼叫出剛剛吞嚥例外
例如另一種方法
private void givenFooThrowsAnException(MyObject myObject) {
try {
doThrow(MyException.class).when(myObject).foo();
} catch (MyException e) {
// Required to stub a checked exception
}
}
檢查foo()方法的簽名,是否應該拋出一個檢查異常?如果不是,你使用它錯了。拋出一個runtimeException,而不是你的測試。 – Manoj 2013-03-04 11:53:49
我會選擇#2。添加拋出沒有錯誤例外的測試方法? – 2013-03-04 11:58:23
myObject是一個依賴項,我將其注入到被測試的類中。我正在測試被測試類所採用的兩條路徑,其中一條發生在myObject.foo()拋出MyException時,這是一個檢查的異常。也許我誤解了你的觀點,但是我的問題不在於我說的doThrow(MyException.class),而是編譯器在這裏看到了對foo()的調用,這引發了必須處理的異常。但是,因爲這只是建立一個存根,異常實際上不會被拋出。 – DaveJohnston 2013-03-04 12:01:42