Перейти к основному содержимому

Поваренная книга Mockito Verify

· 2 мин. чтения

Задача: Сумма двух чисел

Напишите функцию twoSum. Которая получает массив целых чисел nums и целую сумму target, а возвращает индексы двух чисел, сумма которых равна target. Любой набор входных данных имеет ровно одно решение, и вы не можете использовать один и тот же элемент дважды. Ответ можно возвращать в любом порядке...

ANDROMEDA

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, поэтому его легко импортировать и запускать как есть.