问题描述
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