gpt4 book ai didi

java - 使用 mockito 模拟带有 Object 参数的方法

转载 作者:行者123 更新时间:2023-11-30 08:00:22 25 4
gpt4 key购买 nike

我有一个方法:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com