Mockito:如何在一个具有不同参数的模拟器上按顺序调用一个方法

KKK*_*der 5 java mockito

我想测试一个mock的方法,使用不同的参数顺序调用:

我试着使用以下代码:

    InOrder inOrder = inOrder(myobject);
    inOrder.verify(myobject).println(any(String.class));
    inOrder.verify(myobject).println(any(String.class));
    inOrder.verify(myobject).println("");
    inOrder.verify(myobject).println("myfolder");
    inOrder.verify(myobject).println("");
    inOrder.verify(myobject).println(System.getProperty("user.home"));
Run Code Online (Sandbox Code Playgroud)

但是,这似乎不起作用,因为它给了我一个错误说

    inOrder.verify(myobject).println(any(String.class));
Run Code Online (Sandbox Code Playgroud)

已被召唤8次.这是正确的,但它无法解决订单.

我想查一下:

  The println method of `myobject` is first called with any string parameter
  Then it is called with any string parameter again
  Then it is called by an empty string
  Then it is called by string "myfolder"
  ......
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

编辑:

错误信息是:

org.mockito.exceptions.verification.VerificationInOrderFailure: 
Verification in order failure:
printWriter.println(<any>);
Wanted 1 time:
-> at com.mycompany.MyUnitTest.mytest(MyrUnitTest.java:107)
But was 8 times. 
Run Code Online (Sandbox Code Playgroud)

Daw*_*ica 5

使用参数captor捕获所有println调用中的参数,然后检查您感兴趣的每个捕获值.

@Captor ArgumentCaptor<String> stringCaptor;

// ...

@Test public void myTest() {

    // ...

    verify(myobject, 6).println(stringCaptor.capture());
    assertEquals("", stringCaptor.getAllValues()[2]);
    assertEquals("myfolder", stringCaptor.getAllValues()[3]);
    assertEquals("", stringCaptor.getAllValues()[4]);    
    assertEquals(System.getProperty("user.home"), stringCaptro.getAllValues()[5]);
Run Code Online (Sandbox Code Playgroud)