【问题标题】:Mockito multiple ObjectMapper values模拟多个 ObjectMapper 值
【发布时间】:2020-08-19 03:17:58
【问题描述】:

我正在模拟 mapper.convertValue 以返回同一类的 2 个不同的返回类型。

Target target1 = new Target();
target1.setId("123);

Target target2 = new Target();
target2.setId("345);

 Mockito.when(mapper.convertValue(anyMap(), eq(Target.class))).thenReturn(target1);
 Mockito.when(mapper.convertValue(anyMap(), eq(Target.class))).thenReturn(target2);

实际代码是这样调用的,我想模拟 objectmapper 以根据对返回 target1 或 target2。现在它按照我定义的顺序覆盖另一个。

List<Pair<String, Target>> targetPairs = targetPairList.entrySet().stream()
                .map(pair -> ImmutablePair.of(pair.getKey(), mapper.convertValue(pair.getValue().getSourceAsMap(), Target.class)))
                .collect(Collectors.toList());

感谢任何帮助。

【问题讨论】:

    标签: java java-8 objectmapper


    【解决方案1】:

    你可以试试这样的。

    Mockito.when(mapper.convertValue(anyMap(), eq(Target.class))).then(invocationOnMock -> {
      if (invocationOnMock.getArguments()[0] == givenObjectOne) {
        return target1;
      } else if (invocationOnMock.getArguments()[0] == givenObjectTwo) {
        return target2;
      }
      return null;
    });
    

    可以在此处找到有关 Mockito 答案的更多详细信息。 https://javadoc.io/static/org.mockito/mockito-core/3.5.2/org/mockito/stubbing/Answer.html

    【讨论】:

    • 感谢您的回复。这里的 givenObjectOne 或 givenObjectTwo 是什么?因为这对我来说将是 2 个模拟对象,具体取决于这对对象。
    • 如果您需要根据输入参数进行模拟,这就是方法。您还可以修改它以根据调用计数提供模拟
    猜你喜欢
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2022-06-22
    • 2011-05-15
    • 2021-04-07
    • 2014-03-22
    • 1970-01-01
    相关资源
    最近更新 更多