Mockito Verify 用法

概述

本文列举了如何在各种场景下使用Mockito verify方法,本文的组织形式偏向于用法的举例与实践,将不对额外的细节做介绍。 首先我们先mock一个简单的list实现:

1
2
3
4
5
6
7
8
9
10
11
public class MyList extends AbstractList<String> {
@Override
public String get(final int index) {
return null;
}
@Override
public int size() {
return 0;
}
}

用法

验证Mock对象的简单调用

1
2
3
List<String> mockedList = mock(MyList.class);
mockedList.size();
verify(mockedList).size();

验证Mock对象的调用次数

1
2
3
List<String> mockedList = mock(MyList.class);
mockedList.size();
verify(mockedList, times(1)).size();

验证整个Mock对象的都没有被调用

1
2
List<String> mockedList = mock(MyList.class);
verifyZeroInteractions(mockedList);

验证Mock对象的某个方法没有被调用

1
2
List<String> mockedList = mock(MyList.class);
verify(mockedList, times(0)).size();

验证Mock对象的没有意料之外的调用--此案例会失败

1
2
3
4
5
List<String> mockedList = mock(MyList.class);
mockedList.size();
mockedList.clear();
verify(mockedList).size();
verifyNoMoreInteractions(mockedList);

验证调用顺序

1
2
3
4
5
6
7
8
9
List<String> mockedList = mock(MyList.class);
mockedList.size();
mockedList.add("a parameter");
mockedList.clear();
InOrder inOrder = Mockito.inOrder(mockedList);
inOrder.verify(mockedList).size();
inOrder.verify(mockedList).add("a parameter");
inOrder.verify(mockedList).clear();

验证调用没有发生

1
2
3
List<String> mockedList = mock(MyList.class);
mockedList.size();
verify(mockedList, never()).clear();

验证某个方法至少或者之多被调用的次数

1
2
3
4
5
6
7
List<String> mockedList = mock(MyList.class);
mockedList.clear();
mockedList.clear();
mockedList.clear();
verify(mockedList, atLeast(1)).clear();
verify(mockedList, atMost(10)).clear();

准确验证方法调用时的参数

1
2
3
List<String> mockedList = mock(MyList.class);
mockedList.add("test");
verify(mockedList).add("test");

使用flexible和any参数

1
2
3
List<String> mockedList = mock(MyList.class);
mockedList.add("test");
verify(mockedList).add(anyString());

使用参数捕获器

1
2
3
4
5
6
List<String> mockedList = mock(MyList.class);
mockedList.addAll(Lists.<String> newArrayList("someElement"));
ArgumentCaptor<List> argumentCaptor = ArgumentCaptor.forClass(List.class);
verify(mockedList).addAll(argumentCaptor.capture());
List<String> capturedArgument = argumentCaptor.<List<String>> getValue();
assertThat(capturedArgument, hasItem("someElement"));

总结

目前只列举这些例子,如果有用到新的场景会继续添加,例子的代码可以参见github

请我喝杯咖啡吧!