【问题标题】:Matching an array of Objects using Mockito使用 Mockito 匹配对象数组
【发布时间】:2014-08-25 23:41:03
【问题描述】:

我正在尝试为采用请求对象数组的方法设置模拟:

client.batchCall(Request[])

我试过这两种变体:

when(clientMock.batchCall(any(Request[].class))).thenReturn(result);
...
verify(clientMock).batchCall(any(Request[].class));

when(clientMock.batchCall((Request[])anyObject())).thenReturn(result);
...
verify(clientMock).batchCall((Request[])anyObject());

但我可以看出没有调用模拟。

它们都导致以下错误:

Argument(s) are different! Wanted:
clientMock.batchCall(
    <any>
);
-> at com.my.pkg.MyUnitTest.call_test(MyUnitTest.java:95)
Actual invocation has different arguments:
clientMock.batchCall(
    {Request id:123},
    {Request id:456}
);

为什么匹配器不匹配数组?我需要使用特殊的匹配器来匹配对象数组吗?我能找到的最接近的东西是 AdditionalMatches.aryEq(),但这需要我指定数组的确切内容,我不想这样做。

【问题讨论】:

    标签: java mocking mockito


    【解决方案1】:

    所以我很快把一些东西放在一起,看看我是否能找到你的问题,下面是我使用 any(Class) 匹配器的示例代码,它有效。所以有些东西我们没有看到。

    测试用例

    @RunWith(MockitoJUnitRunner.class)
    public class ClientTest
    {
        @Test
        public void test()
        {
            Client client = Mockito.mock(Client.class);
    
            Mockito.when(client.batchCall(Mockito.any(Request[].class))).thenReturn("");
    
            Request[] requests = {
                new Request(), new Request()};
    
            Assert.assertEquals("", client.batchCall(requests));
            Mockito.verify(client, Mockito.times(1)).batchCall(Mockito.any(Request[].class));
        }
    }
    

    客户端类

    public class Client
    {
        public String batchCall(Request[] args)
        {
            return "";
        }
    }
    

    请求类

    public class Request
    {
    
    }
    

    【讨论】:

    • 让问题的作者决定它是否提供问题的答案
    【解决方案2】:

    Necroposting,但请检查您调用的方法是否声明为batchCall(Request[] requests)batchCall(Request... requests)

    如果是后者,试试when(clientMock.batchCall(Mockito.anyVararg()))

    【讨论】:

    • Mockito.anyVararg() 已弃用,请改用(Type) Mockito.any()
    【解决方案3】:

    我遇到了同样的问题,原因是数组中的元素有不同的顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      • 1970-01-01
      • 2016-02-02
      • 2019-08-01
      • 1970-01-01
      • 2013-05-03
      相关资源
      最近更新 更多