Mockito多个ObjectMapper值

问题描述

im模拟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);

实际的代码称为这种方式,在这里我想模拟对象映射器以根据对象对返回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());

感谢您的帮助。

解决方法

您可以尝试这样的事情。

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中的Answer的更多详细信息,请参见此处。 https://javadoc.io/static/org.mockito/mockito-core/3.5.2/org/mockito/stubbing/Answer.html

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...