[英]Use mockito to mock method with Object parameter
我有一种方法:
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))).thenReturn(value1);
Mockito将尝试模拟具有签名send(A param)
而非send(Object param)
。
您需要基于参数的类返回一个不同的值。 您需要为此使用答案。
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
对象,这将允许您指定要返回的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.