我有一个类THAT.class,如下所示:
class THAT {
int aVar;
}
实际上我想模拟一个类的方法,即METH,以类THAT作为参数。作为返回,我希望得到THAT类的变量aVar,如下所示:
Mockito.when(THIS.METH (Matchers.any(THAT.class), ).thenReturn(THAT.aVar);
我怎么能意识到这一点?
答案 0 :(得分:2)
关于"技术方式"其他答案是正确的。解决你的问题。
但你应该明白:可能你正在使用"嘲笑"错误的方式。
你知道,你只使用模拟来实现足够的"控制你正在测试的代码"如所须。含义:一旦你开始做"复杂"您的模拟规范中的内容很可能是您创建难以测试生产代码 - 现在您转向使用复杂测试用例设置来修复该问题的创可贴
您应该做其他事情:寻找重新编写生产代码的方法。因此,它变得易于测试。
喜欢:而不是"允许"对于任何类型的That
对象 - 仅预期并使用特定实例。如:
when(foo.bar(whatever)).thenReturn(whatever);
允许任意输入是没有意义的。你应该努力尽量减少自由度"你的模拟被指定为。
答案 1 :(得分:1)
您可以使用ArgumentCaptor
捕获参数并从中返回值。
final ArgumentCaptor<THAT> thatCaptor = ArgumentCaptor.forClass(THAT.class);
doAnswer (invocation -> {
return thatCaptor.getValue().getAVar()//use the variable directly if its public
}).when(This).METH(thatCaptor.capture());
答案 2 :(得分:1)
您可以使用doAnswer返回特定于呼叫的值
doAnswer (invocation -> {
return invocation.getArgument(0);
}).when(This.METH(Matchers.any(THAT.class)));