Java 如何将多个ArgumentMatcher传递给Mockito
我有两个自定义ArgumentMatcher,我希望我的mock根据参数值返回不同的值 例如:Java 如何将多个ArgumentMatcher传递给Mockito,java,mocking,mockito,argument-matcher,argument-matching,Java,Mocking,Mockito,Argument Matcher,Argument Matching,我有两个自定义ArgumentMatcher,我希望我的mock根据参数值返回不同的值 例如: when(myMock.method(new ArgMatcher1()).thenReturn(false); when(myMock.method(new ArgMatcher2()).thenReturn(true); 不幸的是,第二次调用when会导致异常。这对我来说是有意义的,因为如果参数匹配两个ArgumentMatcher,Mockito将不知道是否返回true或false。莫基托有没
when(myMock.method(new ArgMatcher1()).thenReturn(false);
when(myMock.method(new ArgMatcher2()).thenReturn(true);
不幸的是,第二次调用when会导致异常。这对我来说是有意义的,因为如果参数匹配两个ArgumentMatcher,Mockito将不知道是否返回true或false。莫基托有没有办法做到这一点?它甚至可能是这样的:
when(myMock.method(new ArgMatcher2()).thenReturn(false).elseReturn(true);
我不知道你的匹配器是如何编码的,但是有两个不同的匹配器是受支持的。当然,也许你正在存根的方法不能通过mockitofinal进行模拟 对于记录,还可以告诉存根以不同的方式返回不同的返回值:
when(myMock.method(new ArgMatcher2()).thenReturn(false, false, true).thenReturn(true);
如果您对从Mockito返回默认值感兴趣,那么我已经实现了以下目标:
when(myMock.myMethod(any())).thenReturn(true);
when(myMosk.myMethod("some other argumetn")).thenReturn(true);
这对你有帮助吗?很难说,我没有像你使用新关键字那样使用匹配器。可能是Mockito不太了解您的自定义匹配程序。切换到语法:
doAnswer(args->false).when(myMock).myMethod(any());
看,你绝对可以让两个不同的匹配者与Mockito合作。例外情况是什么?ArgMatcher1和ArgMatcher2做什么?我找到了一个更好的方法来做我需要做的事情,所以我不再追求这个选项。可能重复的