我正在尝试为一个需要一个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 { }