我想用Mockito编写一个Junit测试
说这是我的模拟:
IServerApi routingServerApi = mock(ServerApi.class);
when(routingServerApi.sendRequest(anyString(), eq("request1"))).thenReturn(myObj1);
when(routingServerApi.sendRequest(anyString(), eq("request2"))).thenReturn(myObj2);
我想验证使用
sendRequest
调用request1
之前是否使用request2
(它们之间没有其他调用)。我怎样才能做到这一点?
我已经看到了这个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());
然后您可以检查waht是否传递给
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/