Mockito When / then Cookbook

1. Общ преглед

Тази готварска книга показва как да използвате Mockito за конфигуриране на поведение в различни примери и случаи на употреба.

В формата на готварската книга е пример фокусирани и практично - без излишни подробности и обяснения необходими.

И разбира се, ако искате да научите повече за тестването добре с Mockito, разгледайте другите статии на Mockito тук.

Ще се подиграем на едно просто изпълнение на списъка - същото изпълнение, което използвахме в предишната готварска книга:

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 return - за изхвърляне на изключение

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 и сега Mockito . Целта е тази информация да бъде лесно достъпна онлайн - и да се добавя към нея, когато попадна на нов полезен пример.

Внедряването на всички тези примери и кодови фрагменти може да бъде намерено в GitHub - това е проект, базиран на Maven, така че трябва да е лесно да се импортира и да се изпълнява както е.