[英]Mockito, void method with checked exception
我想知道為什么我需要處理異常,當我模擬一個拋出異常的 void 方法時。
例如
public class MyObject {
public void call() throws SomeException {
//do something
}
}
現在當我這樣做時,
@Mock
MyObject myObject;
doNothing().when(myObject).call()
它導致編譯錯誤說
“錯誤:未報告的異常 SomeException;必須被捕獲或聲明為拋出”
我想知道,為什么我需要處理該方法的異常,該方法本身正在被嘲笑。
當您在 Java 中使用 Mockito 模擬對象時。 該框架不會對語言規范進行任何更改。 而在 Java 中, throws
子句是在編譯時定義的。 您不能在運行時更改聲明的異常。 在您的情況下,如果您調用方法MyObject.call()
,則SomeException
像在任何普通 Java 代碼中一樣處理SomeException
。
因為在單元測試中,你不想處理你沒有測試的事情。 在你的情況下,我會簡單地在測試方法中重新聲明throws SomeException
。
我遇到了多個檢查異常的類似問題。 我的代碼看起來像這樣:
public class MyObject {
public void call() throws ExceptionOne, ExceptionTwo {
//do something
}
}
我的測試是:
@Mock
MyObject myObject;
@Test
public void exampleTest throws ExceptionOne {
doThrow(new ExceptionOne()).when(myObject).call()
// assert...
}
錯誤消息是unreported exception: ExceptionOne
解決方案是讓exampleTest
拋出exceptionOne 和exceptionTwo。 如果您只報告一個已檢查的異常,它就不會運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.