我想用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()

java - 如何确定对单个模拟的调用顺序?-LMLPHP

一些评论说我可以使用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/

10-08 20:42