Ответ
Mockito — это библиотека для модульного тестирования в Java, которая создает mock-объекты (заглушки) для замены реальных зависимостей. Это позволяет изолировать тестируемый код и проверять его взаимодействие с другими объектами.
Основные концепции и API:
-
Создание мока:
List<String> mockedList = Mockito.mock(List.class);Или с использованием аннотаций (требует
MockitoAnnotations.openMocks(this)или@ExtendWith(MockitoExtension.class)в JUnit 5):@Mock List<String> mockedList; -
Задание поведения (stubbing):
when(mockedList.get(0)).thenReturn("first"); when(mockedList.get(anyInt())).thenThrow(new RuntimeException()); -
Проверка вызовов (verification):
verify(mockedList).get(0); // Проверяет, что метод был вызван 1 раз verify(mockedList, times(2)).add(anyString()); // Проверяет точное количество вызовов verify(mockedList, never()).clear(); // Проверяет, что метод не вызывался -
Аргументные матчеры:
any(),eq(),contains()и др. для гибкой проверки аргументов.
Пример полного теста:
@ExtendWith(MockitoExtension.class)
class ServiceTest {
@Mock
private DependencyRepository repository;
@InjectMocks
private ServiceUnderTest service;
@Test
void testServiceCall() {
// Задаем поведение мока
when(repository.findById(1L)).thenReturn(new Entity("test"));
// Вызываем тестируемый метод
String result = service.process(1L);
// Проверяем результат и взаимодействие
assertEquals("processed: test", result);
verify(repository).findById(1L);
}
}
Spy vs Mock: @Spy создает частичный мок на реальном объекте, позволяя вызывать реальные методы, если их поведение не переопределено.