加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用Mockito匹配一个对象数组

发布时间:2020-12-14 05:02:38 所属栏目:Java 来源:网络整理
导读:我正在尝试为一个需要一个Request对象数组的方法设置一个模拟: client.batchCall(Request[]) 我试过这两个变体: when(clientMock.batchCall(any(Request[].class))).thenReturn(result);...verify(clientMock).batchCall(any(Request[].class)); 和 when(c
我正在尝试为一个需要一个Request对象数组的方法设置一个模拟:
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(),但是这需要我指定数组的确切内容,我宁愿不做.

解决方法

所以我很快把东西放在一起,看看是否可以找到你的问题,下面是我使用任何(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
{

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读