1. Обзор
Эта кулинарная книга иллюстрирует , как использовать проверку Mockito в различных случаях использования.
Формат кулинарной книги ориентирован на примеры и практичен — никаких лишних деталей и объяснений не требуется.
Мы будем издеваться над простой реализацией списка:
public class MyList extends AbstractList<String> {
@Override
public String get(final int index) {
return null;
}
@Override
public int size() {
return 0;
}
}
2. Поваренная книга
Проверьте простой вызов на макете:
List<String> mockedList = mock(MyList.class);
mockedList.size();
verify(mockedList).size();
Проверьте количество взаимодействий с макетом:
List<String> mockedList = mock(MyList.class);
mockedList.size();
verify(mockedList, times(1)).size();
Убедитесь, что не произошло никакого взаимодействия со всем макетом:
List<String> mockedList = mock(MyList.class);
verifyNoInteractions(mockedList);
Убедитесь, что не произошло взаимодействия с конкретным методом:
List<String> mockedList = mock(MyList.class);
verify(mockedList, times(0)).size();
Убедитесь, что нет непредвиденных взаимодействий — это должно завершиться ошибкой:
List<String> mockedList = mock(MyList.class);
mockedList.size();
mockedList.clear();
verify(mockedList).size();
verifyNoMoreInteractions(mockedList);
Проверить порядок взаимодействий:
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();
Убедитесь, что взаимодействие не произошло:
List<String> mockedList = mock(MyList.class);
mockedList.size();
verify(mockedList, never()).clear();
Убедитесь, что взаимодействие произошло хотя бы определенное количество раз:
List<String> mockedList = mock(MyList.class);
mockedList.clear();
mockedList.clear();
mockedList.clear();
verify(mockedList, atLeast(1)).clear();
verify(mockedList, atMost(10)).clear();
Проверить взаимодействие с точным аргументом:
List<String> mockedList = mock(MyList.class);
mockedList.add("test");
verify(mockedList).add("test");
Проверьте взаимодействие с гибким/любым аргументом:
List<String> mockedList = mock(MyList.class);
mockedList.add("test");
verify(mockedList).add(anyString());
Проверьте взаимодействие с помощью захвата аргументов:
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"));
3. Заключение
Цель этого руководства состоит в том, чтобы сделать эту информацию доступной в Интернете. Я опубликовал несколько подобных руководств по разработке на Google Guava и Hamcrest .
Реализацию всех этих примеров и фрагментов кода можно найти на GitHub . Это проект на основе Maven, поэтому его легко импортировать и запускать как есть.