我想用mockito编写junit测试
说这是我的模拟:
IServerApi routingServerApi = mock(ServerApi.class);
when(routingServerApi.sendRequest(anyString(), eq("request1"))).thenReturn(myObj1);
when(routingServerApi.sendRequest(anyString(), eq("request2"))).thenReturn(myObj2);
我想验证在使用 request2
调用 sendRequest
之前是否使用 request1
调用它(并且它们之间没有其他调用)。
我该怎么做?
我看过这个SOF问题,
但我想验证对一个模拟的调用顺序,而不是两个。
此语法对我不起作用(初始化 inOrder()
时出现编译错误)
InOrder inOrder = inOrder(mockRoutingServerApi);
inOrder.verify(mockRoutingServerApi).sendRtUpdates(time1, ImmutableList.of("update1"));
inOrder.verify(mockRoutingServerApi).sendRoutingRequest("request1");
inOrder.verify(mockRoutingServerApi).sendRtUpdates(time1, ImmutableList.of("update2"));
inOrder.verify(mockRoutingServerApi).sendRoutingRequest("request2");
它无法识别inOrder()
有人评论说我可以使用 ArgumentCaptor
但我不知道如何使用。
最佳答案
ArgumentCaptor
可以用来代替 InOrder
检查接收到的值。
ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
verify(mockRoutingServerApi, times(2)).sendRoutingRequest(captor.capture());
然后您可以检查传递给 sendRoutingRequest
的内容
captor.getAllValues() //Should be a List with values {"request1", "request2"}
这看起来更像是发明轮子,因为 Mockito
支持 InOrder.verify
。
确保您有 Mockito
的静态导入。否则请尝试 Mockito.inOrder(routingServerApi)
。
关于java - 如何断言对一个模拟的调用顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36909853/