在Mockito中验证后续调用相同方法的参数

时间:2014-10-28 21:13:14

标签: java unit-testing mocking mockito

我有一个A类,它必须对其依赖关系B的方法进行两次后续调用,该方法将一个集合作为一个参数:

class A{
    private B myDependency;

    public myClassMethod() {
    // ... on more than one occasion calls myDependency.dependencyMehtod(someColleciton);
    }
}

class B{
    public void dependencyMehtod(Collection<Something> input)
}

我想为A级(最好是使用Mockito)编写一个单元测试来验证 依赖方法被称为确切的给定次数,并且还在每次后续调用时验证输入Collection的大小(参数的大小因调用而异)。 我该怎么做?

我尝试使用

myAObject.myClassMethod();

verify(myMockOfB).dependencyMehtod((Collection<Something>) argThat(hasSize(3));  //I expect a size of 3 on the first call
verify(myMockOfB).dependencyMehtod((Collection<Something>) argThat(hasSize(1));  //I expect a size of 1 on the second call

但是,我从Mockito收到一条错误消息,发现大小为1的集合,其中预计会收集大小为3的集合。我做错了什么?

1 个答案:

答案 0 :(得分:1)

您可以使用ArgumentCaptor。这是一个例子:

@Captor
private ArgumentCaptor<Collection<Something>> valuesArgument;

/*
...
 */

@Test
public void test() {
    /*
    ...
     */

    // verify the number of calls
    verify(myMockOfB, times(2)).dependencyMehtod(valuesArgument.capture());

    // first call
    assertEquals(3, valuesArgument.getAllValues().get(0).size());

    // second call
    assertEquals(1, valuesArgument.getAllValues().get(1).size());
}