Mockito doAnswer然后返回一种方法

Apl*_*ana 3 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){

}
Run Code Online (Sandbox Code Playgroud)

测试:

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

Mockito.when(mockedMtnService.getModelSearchStrings(Mockito.anyMap(), Mockito.anyObject())).thenReturn(result);
Run Code Online (Sandbox Code Playgroud)

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

Laz*_*ass 12

我只能假设你正在寻找thenAnswer回答.随着thenAnswer您可以修改嘲笑方法的参数,并从该方法返回一个结果.

例如:

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;
    }
});
Run Code Online (Sandbox Code Playgroud)

或者使用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;
});
Run Code Online (Sandbox Code Playgroud)