您可以使用自定义VerificationMode来计算调用次数,您可以:
public class InvocationCounter {
public static T countInvocations(T mock,AtomicInteger count) {
return Mockito.verify(mock,new Counter(count));
}
private InvocationCounter(){}
private static class Counter implements VerificationInOrderMode,VerificationMode {
private final AtomicInteger count;
private Counter(AtomicInteger count) {
this.count = count;
}
public void verify(VerificationData data) {
count.set(data.getAllInvocations().size());
}
public void verifyInOrder(VerificationDataInOrder data) {
count.set(data.getAllInvocations().size());
}
@Override
public VerificationMode description(String description) {
return VerificationModeFactory.description(this,description);
}
}
}
然后像这样使用它(也适用于void返回类型):
@Mock
private Function callable;
AtomicInteger count= new AtomicInteger(); //here is the actual invocation count stored
countInvocations(callable,count).apply( anyString());
assertThat(count.get(),is(2));