2011-06-16 76 views
15

我是Mockito的新手,想在單元測試中使用它。拋出異常而不是返回默認值

我不喜歡的是使用Mockito.mock(Class<T>)爲沒有明確定義行爲的方法返回默認值(如null)創建的模擬。相反,我希望他們在這種情況下拋出一個異常,所以我知道我需要添加這個定義。

我試過如下:

SomeType m = mock(SomeType.class, new ThrowsException(new SomeRuntimeException(...))); 
when(m.a()).thenReturn(...); 

m.a(); // ok 
m.b(); // throws exception 

但由於異常調用when()期間已經拋出不起作用。

有沒有其他的方法來實現這一目標?

+0

+1:有趣的使用案例!我從來沒有想過這個:-) – 2011-06-16 07:39:40

回答

13

更換

when(m.a()).thenReturn(...);

doReturn(...).when(m).a();

+0

+1謝謝! doReturn的javadoc解釋了兩條線的區別。它也恰恰指出我的情況。 :-) – Wolfgang 2011-06-16 12:36:32

+2

我不知道Mockito的理由是不提供一種方法來爲未打開的方法拋出異常。使用ThrowsException + doReturn的缺省答案確實有效,但它實際上意味着你永遠不能使用'when',這是首選的方法。 – 2011-09-22 17:32:23

+0

您的意思是類似於以下內容: Mockito.doThrow(new RuntimeException())。when(m).a(); – fivanski 2011-09-26 13:31:11