2016-11-04 145 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,这个解决方案为我工作。 –

相关问题