Мокито Когда/Затем Поваренная книга

Мокито Когда / Затем Кулинарная книга

1. обзор

Эта поваренная книга показываетhow to use Mockito to configure behavior в различных примерах и сценариях использования.

format of the cookbook is example focused и практический - никаких посторонних подробностей и пояснений не требуется.

И, конечно же, если вы хотите узнать больше о хорошем тестировании с помощью Mockito, посмотритеthe other Mockito articles here.

Дальнейшее чтение:

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

Примеры, использование и лучшие практикиMockito Verify.

Read more

Мокито - Использование шпионов

Как правильно использовать шпионов в Mockito, и чем шпионы отличаются от насмешек.

Read more

Mockito Mock Методы

Это руководство иллюстрирует различные способы использования стандартных статических методов Mockito API.

Read more

Мы собираемся быть реализациейmocking a simple list - той же реализацией, которую мы использовали в предыдущей кулинарной книге:

public class MyList extends AbstractList {

    @Override
    public String get(final int index) {
        return null;
    }
    @Override
    public int size() {
        return 1;
    }
}

2. Поваренная книга

настроить простое поведение возврата для макета

MyList listMock = Mockito.mock(MyList.class);
when(listMock.add(anyString())).thenReturn(false);

boolean added = listMock.add(randomAlphabetic(6));
assertThat(added, is(false));

настроить поведение возврата для макета альтернативным способом

MyList listMock = Mockito.mock(MyList.class);
doReturn(false).when(listMock).add(anyString());

boolean added = listMock.add(randomAlphabetic(6));
assertThat(added, is(false));

настроить макет, чтобы генерировать исключение при вызове метода

@Test(expected = IllegalStateException.class)
public void givenMethodIsConfiguredToThrowException_whenCallingMethod_thenExceptionIsThrown() {
    MyList listMock = Mockito.mock(MyList.class);
    when(listMock.add(anyString())).thenThrow(IllegalStateException.class);

    listMock.add(randomAlphabetic(6));
}

настроить поведение метода с возвращаемым типом void - выбросить исключение

MyList listMock = Mockito.mock(MyList.class);
doThrow(NullPointerException.class).when(listMock).clear();

listMock.clear();

настроить поведение нескольких вызовов

MyList listMock = Mockito.mock(MyList.class);
when(listMock.add(anyString()))
  .thenReturn(false)
  .thenThrow(IllegalStateException.class);

listMock.add(randomAlphabetic(6));
listMock.add(randomAlphabetic(6)); // will throw the exception

настроить поведение шпиона

MyList instance = new MyList();
MyList spy = Mockito.spy(instance);

doThrow(NullPointerException.class).when(spy).size();
spy.size(); // will throw the exception

configure метод для вызова реального, базового метода на макете

MyList listMock = Mockito.mock(MyList.class);
when(listMock.size()).thenCallRealMethod();

assertThat(listMock.size(), equalTo(1));

настроить вызов фиктивного метода с настраиваемым ответом

MyList listMock = Mockito.mock(MyList.class);
doAnswer(invocation -> "Always the same").when(listMock).get(anyInt());

String element = listMock.get(1);
assertThat(element, is(equalTo("Always the same")));

3. Заключение

Этот формат является экспериментом - я публикую некоторые из моих кулинарных книг по внутренней разработке по заданной теме - поGoogle Guava,Hamcrest иnow Mockito. Цель состоит в том, чтобы эта информация была легко доступна онлайн и добавлялась к ней всякий раз, когда я сталкиваюсь с новым полезным примером.

Реализация всех этих примеров и фрагментов кодаcan be found over on GitHub - это проект на основе Maven, поэтому его должно быть легко импортировать и запускать как есть.