2016-11-04 178 views
1

我有一種情況,我的方法返回一些對象,並且方法包含一些參數,並且我有基於返回的響應和參數之一的條件。Mockito doAnswer&然後返回一種方法

Map<String,List<Object>> testMap = new HashMap<>(); 
Object obj = new Object(); 

Set<String> test = myService.getModelSearchStrings(testMap, obj); 
if(CollectionUtils.isNotEmpty(test){ 

} 

if(MapUtils.isNotEmpty(testMap){ 

} 

測試:

Set<String> result = new HashSet<>(); 
result.add("123"); 

Mockito.when(mockedMtnService.getModelSearchStrings(Mockito.anyMap(), Mockito.anyObject())).thenReturn(result); 

我想回到假人響應,即結果HashSet的,並希望更新參數值(圖)。

+0

我不太清楚有關的問題,代碼看起來還好。也許你應該發佈一個完整的例子(代碼和測試)和錯誤消息或預期/意外的行爲。 –

回答

7

我只能假設你正在尋找thenAnswer & Answer。使用thenAnswer,您可以修改模擬方法的參數,並返回該方法的結果。

E.g:

Set<String> result = new HashSet<>(); 
result.add("123"); 

Mockito.when(mockedMtnService.getModelSearchStrings(Mockito.anyMap(), Mockito.anyObject())).thenAnswer(new Answer<Set>() { 
    @Override 
    public String answer(InvocationOnMock invocation) throws Throwable { 
     Map<String,List<Object>> mapArg = (Map<String,List<Object>>)invocation.getArguments()[0]; 
     // do something with mapArg.... 
     return result; 
    } 
}); 

或者與Java 8拉姆達:

Mockito.when(mockedMtnService.getModelSearchStrings(Mockito.anyMap(), Mockito.anyObject())).thenAnswer(invocation -> { 
    Map<String,List<Object>> mapArg = (Map<String,List<Object>>)invocation.getArguments()[0]; 
    // do something with mapArg.... 
    return result; 
}); 
+0

謝謝@LazerBass,這個解決方案爲我工作。 –

相關問題