Java 使用mockito模拟带有对象参数的方法
我有一个方法:Java 使用mockito模拟带有对象参数的方法,java,unit-testing,mockito,Java,Unit Testing,Mockito,我有一个方法: public class Sender{ public Object send(Object param){ Object x; ..... return (x); } } 我想使用Mockito为这个方法编写一个单元测试,以便返回类型值基于参数的类类型。所以我这样做了: when(sender.send(Matchers.any(A.class))).thenReturn(value1); when(sender.send(Matchers.a
public class Sender{
public Object send(Object param){
Object x;
.....
return (x);
}
}
我想使用Mockito为这个方法编写一个单元测试,以便返回类型值基于参数的类类型。所以我这样做了:
when(sender.send(Matchers.any(A.class))).thenReturn(value1);
when(sender.send(Matchers.any(B.class))).thenReturn(value2);
但无论参数类类型如何,返回值始终为值2。如何让它为A类类型参数返回值1,为B类类型参数返回值2
when(sender.send(Matchers.any(A.class))。然后返回(value1)代码>
Mockito将尝试使用签名send(参数)
,而不是send(对象参数)
来模拟方法
您需要的是根据参数的类返回不同的值。你需要用答案来回答这个问题
Mockito.doAnswer(invocationOnMock -> {
if(invocationOnMock.getArguments()[0].getClass() instanceof A) {
return value1;
}
if(invocationOnMock.getArguments()[0].getClass() instanceof B) {
return value2;
}
else {
throw new IllegalArgumentException("unexpected type");
}
}).when(mock).send(Mockito.anyObject());
有两种选择:
不要使用any
。使用测试中使用的A
或B
实例
使用Answer
对象,该对象允许您指定要返回的内容
正是我所想的,但懒得写:-)@noscreenname啊!你能把它转换成不使用lambda表达式吗?我理解其意图,但无法复制。@Sherlock123我可以,但如果您查找Mockito.doAnswer()文档,您也可以;)