【问题标题】:how to pass in multiple ArgumentMatchers to Mockito如何将多个 ArgumentMatchers 传递给 Mockito
【发布时间】:2013-03-08 20:58:52
【问题描述】:

我有两个自定义 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);

【问题讨论】:

标签: java mocking mockito argument-matcher argument-matching


【解决方案1】:

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

还可以告诉存根以不同的方式返回不同的返回值:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      切换到语法:

      doAnswer(args->false).when(myMock).myMethod(any());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-10
        • 2011-04-29
        • 1970-01-01
        • 1970-01-01
        • 2020-11-07
        • 1970-01-01
        • 2015-05-15
        • 2018-08-01
        相关资源
        最近更新 更多