簡體   English   中英

Mockito,帶有檢查異常的 void 方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM