首页 > 解决方案 > 模拟多个 ObjectMapper 值

问题描述

即时模拟 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());

任何帮助表示赞赏。

标签: javajava-8objectmapper

解决方案


你可以尝试这样的事情。

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


推荐阅读