【问题标题】:Mockito doAnswer & thenReturn in one methodMockito doAnswer & thenReturn 以一种方法
【发布时间】:2016-11-04 23:49:54
【问题描述】:

我的方法正在返回一些对象,并且方法包含一些参数,并且我的条件基于返回的响应和参数之一。

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

【问题讨论】:

  • 我不太确定这个问题,代码看起来不错。也许您应该发布一个完整的示例(代码和测试)和错误消息或预期/意外的行为。

标签: java mockito


【解决方案1】:

我只能假设您正在寻找thenAnswer 和Answer。使用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;
    }
});

或者使用 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;
});

【讨论】:

  • 完全不相关:我看到您在stackoverflow.com/review/triage/20799771 的分类队列中标记为“编辑”...只是:错误的决定。本题需要OP去掉截图,将对应的文字作为文字放入题中。只有OP应该做这样的事情。所以请记住:只有当其他人可以编辑问题时才进行编辑分类。任何需要所有者改进内容的东西,都不应该去“编辑”。
  • stackoverflow.com/questions/52234471/… 类似...除了 OP 之外,其他任何人都无法改善这个问题。所以,说真的:对“编辑”进行分类要更加谨慎。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-09
  • 2022-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多