Vys*_*rat 13 java mocking mockito
我正在尝试为一个获取Request对象数组的方法设置一个mock:
client.batchCall(Request[])
Run Code Online (Sandbox Code Playgroud)
我尝试过这两种变化:
when(clientMock.batchCall(any(Request[].class))).thenReturn(result);
...
verify(clientMock).batchCall(any(Request[].class));
Run Code Online (Sandbox Code Playgroud)
和
when(clientMock.batchCall((Request[])anyObject())).thenReturn(result);
...
verify(clientMock).batchCall((Request[])anyObject());
Run Code Online (Sandbox Code Playgroud)
但我可以告诉我们没有调用嘲笑.
它们都会导致以下错误:
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}
);
Run Code Online (Sandbox Code Playgroud)
为什么匹配器与阵列不匹配?我需要使用一个特殊的匹配器来匹配一个对象数组吗?我能找到的最接近的是AdditionalMatches.aryEq(),但这要求我指定数组的确切内容,我宁愿不这样做.
ndr*_*one 10
所以我很快把一些东西放在一起,看看我是否能找到你的问题,而且下面不能使用任何(类)匹配器的示例代码并且它有效.所以我们没有看到一些东西.
测试用例
@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));
}
}
Run Code Online (Sandbox Code Playgroud)
客户类
public class Client
{
public String batchCall(Request[] args)
{
return "";
}
}
Run Code Online (Sandbox Code Playgroud)
请求类
public class Request
{
}
Run Code Online (Sandbox Code Playgroud)
进行死灵发布,但是检查您正在调用的方法是否声明为batchCall(Request[] requests)或batchCall(Request... requests)。
如果是后者,请尝试when(clientMock.batchCall(Mockito.anyVararg()))。
| 归档时间: |
|
| 查看次数: |
32109 次 |
| 最近记录: |