Ответ
Mockito — это фреймворк для создания мок-объектов (mock objects) в unit-тестах, позволяющий изолировать тестируемый класс от его зависимостей.
Ключевые возможности:
-
Создание моков:
List<String> mockedList = mock(List.class); // Или с аннотацией @Mock и вызовом MockitoAnnotations.openMocks(this) -
Задание поведения (stubbing): Определение, что должен возвращать метод мока.
when(mockedList.get(0)).thenReturn("first"); when(mockedList.get(anyInt())).thenReturn("element"); // С матчером when(mockedList.clear()).thenThrow(new RuntimeException()); // Исключение -
Верификация вызовов: Проверка, что методы мока были вызваны с ожидаемыми параметрами.
verify(mockedList).get(0); verify(mockedList, times(2)).add(anyString()); // Проверка количества вызовов -
Захват аргументов: Позволяет проверить аргументы, переданные в метод мока.
ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class); verify(mockedList).add(captor.capture()); assertEquals("test", captor.getValue()); -
Spy: Создание частичного мока на основе реального объекта. Вызовы по умолчанию делегируются реальному объекту, но можно переопределить поведение.
List<String> realList = new ArrayList<>(); List<String> spiedList = spy(realList); doReturn("fake").when(spiedList).get(10); // Заглушка для spy
Почему Mockito популярен: Он предоставляет чистый, читаемый API для создания тестов с моками, что является ключевым для модульного тестирования и соблюдения принципа единой ответственности в тестах.