2013-03-08 115 views
1

我有兩個自定義的ArgumentMatchers,我希望我的模擬根據參數值返回不同的值。如何將多個ArgumentMatchers傳遞給Mockito

實施例:

when(myMock.method(new ArgMatcher1()).thenReturn(false); 
when(myMock.method(new ArgMatcher2()).thenReturn(true); 

不幸的是,第二次調用在一個異常時,()的結果。這對我來說很有意義,因爲如果參數匹配兩個ArgumentMatchers,Mockito不知道是否返回true或false。有沒有辦法在Mockito中做到這一點?它甚至可以是這樣的:

when(myMock.method(new ArgMatcher2()).thenReturn(false).elseReturn(true); 
+1

請參閱http://stackoverflow.com/questions/13846837/using-multiple-argumentmatchers-on-the-same-mock?rq=1。 – 2013-03-08 21:00:10

+1

你絕對可以有兩個不同的匹配器與Mockito一起工作。什麼是例外? ArgMatcher1和ArgMatcher2做了什麼? – jhericks 2013-03-09 01:29:21

+0

我發現了一種更好的方式來做我需要的,所以我不再追求這個選項。 – 2013-03-09 02:52:16

回答

0

我不知道你的匹配是如何編碼的,但有兩個不同的匹配支持,當然,也許你是磕碰的方法是無法通過的Mockito(最終)mockable。

而且備案就可以告訴存根以不同的方式返回不同的返回值:

when(myMock.method(new ArgMatcher2()).thenReturn(false, false, true).thenReturn(true); 
0

如果你有興趣在返回從一個的Mockito默認值,那麼這個我已經實現了一樣即:

when(myMock.myMethod(any())).thenReturn(true); 
when(myMosk.myMethod("some other argumetn")).thenReturn(true); 

它會幫助你嗎?很難說,我還沒有像關鍵字那樣使用匹配器。可能是,Mockito不太瞭解你的習慣匹配者。