Mockito doAnswer&然后返回一种方法

时间:2016-11-04 10:33:36

标签: java mockito

我遇到的情况是我的方法返回一些对象,方法包含一些参数,并且我根据返回的响应和其中一个参数有条件。

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);

我想返回Dummy响应,即结果HashSet,并希望更新参数值(Map)。

1 个答案:

答案 0 :(得分:10)

我只能假设您正在寻找thenAnswer&amp; 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 lambda:

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;
});