2013-10-20 107 views
8

我想知道爲什麼我需要處理異常,當我嘲笑拋出異常的無效方法時。Mockito,void檢查異常的方法

例如

public class MyObject { 
    public void call() throws SomeException { 
     //do something 
     } 
} 

現在,當我這樣做,

@Mock 
MyObject myObject; 

doNothing().when(myObject).call() 

它會導致編譯錯誤說

"error: unreported exception SomeException; must be caught or declared to be thrown"

我很納悶,爲什麼我需要處理異常對於本身被嘲笑的方法。

+2

你不需要處理它。只需在您的測試方法中添加'throws Exception'即可。我將所有的JUnit方法標記爲拋出異常,這是習慣的問題 - 沒有理由不這樣做。 –

+0

@DawoodibnKareem當我想表示測試應該引發異常時,我使用斷言助手,例如'@Test(expected = ...)'。我儘量避免測試方法簽名中的'throws'子句,因爲它沒有任何關於測試本身的有用信息。 –

回答

7

當您在Java中使用Mockito模擬對象時。框架不會改變任何語言規範。在Java中,編譯時定義了throws子句。您無法在運行時更改聲明的異常。在你的情況下,如果你調用方法MyObject.call(),你必須像處理任何普通的Java代碼一樣處理SomeException

由於在單元測試中,你不想處理你沒有測試的東西。在你的情況下,我只是在測試方法中重新聲明throws SomeException

相關問題