我有一个方法:
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)
。
您需要的是根据您的参数类返回不同的值。为此,您需要使用 Answers。
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());
关于java - 使用 mockito 模拟带有 Object 参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38530652/