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