1

我有两个自定义 ArgumentMatchers,我希望我的模拟根据参数值返回不同的值。

例子:

when(myMock.method(new ArgMatcher1()).thenReturn(false);
when(myMock.method(new ArgMatcher2()).thenReturn(true);

不幸的是,对 when() 的第二次调用导致异常。这对我来说很有意义,因为如果参数匹配两个 ArgumentMatchers,Mockito 将不知道返回 true 还是 false。有没有办法在 Mockito 中做到这一点?它甚至可能是这样的:

when(myMock.method(new ArgMatcher2()).thenReturn(false).elseReturn(true);
4

3 回答 3

0

我不确定你的匹配器是如何编码的,但是当然支持两个不同的匹配器,也许你存根的方法不能通过 Mockito(最终)模拟。

此外,为了记录,可以告诉存根以不同的方式返回不同的返回值:

when(myMock.method(new ArgMatcher2()).thenReturn(false, false, true).thenReturn(true);
于 2013-03-11T17:21:14.497 回答
0

如果您有兴趣从 Mockito 返回默认值,那么我已经做到了:

when(myMock.myMethod(any())).thenReturn(true);
when(myMosk.myMethod("some other argumetn")).thenReturn(true);

它会帮助你吗?很难说,我没有像使用new关键字那样使用匹配器。可能是,Mockito 不太了解您的自定义匹配器。

于 2013-04-02T14:57:41.583 回答
0

切换到语法:

doAnswer(args->false).when(myMock).myMethod(any());
于 2021-04-27T12:29:38.070 回答