Mockito — это популярная Java-библиотека для создания и использования макетов (mocks) или фальшивых объектов (fakes) в автоматизированных тестах. Основная цель Mockito — упростить разработку тестов за счёт предоставления интуитивно понятного API для имитации взаимодействия объектов. Вот основные возможности и функции Mockito:
mock() : Создаёт макет указанного класса или интерфейса. Например, List mockedList = mock(List.class); создаст макет списка.@Mock : Аннотация для создания макета; используется с аннотацией @RunWith(MockitoJUnitRunner.class) или @ExtendWith(MockitoExtension.class) для инициализации в JUnit 4 и JUnit 5 соответственно.when() и thenReturn() : Определяют поведение макета при вызове метода. Например, when(mockedList.get(0)).thenReturn("first"); указывает, что при вызове get(0) должно возвращаться "first".doReturn() : Альтернативный способ задания возвращаемого значения, который может быть использован для избежания дополнительного вызова метода в when().verify() : Проверяет, что метод был вызван с определёнными параметрами и определённое количество раз. Например, verify(mockedList).get(0); убеждается, что метод get(0) был вызван хотя бы один раз.times(), never() : С verify(), можно уточнить количество вызовов: verify(mockedList, times(1)).get(0); проверяет, что get(0) был вызван один раз.when() и thenThrow() : Определяют исключение, которое должно быть выброшено методом. Например, when(mockedList.get(0)).thenThrow(new RuntimeException()); вызовет исключение при вызове get(0).any(), eq(), anyInt(), и другие : Эти методы из класса Matchers (в Mockito 1.x и 2.x) или из ArgumentMatchers (в Mockito 3.x) используются для определения гибких правил в when() и verify() для параметров методов.spy() : Создаёт “шпиона” вокруг реального объекта, позволяя перехватывать вызовы к его методам, при этом сохраняя оригинальное поведение по умолчанию. Например, List list = new LinkedList(); List spyList = spy(list); создаст шпиона вокруг реального списка.doReturn() в контексте спая может быть использован для изменения поведения без вызова оригинального метода.Mockito.debug() : Помогает в отладке путём вывода подробной информации о макетах и их вызовах.руемых компонентов от их зависимостей.
@InjectMocks : Создаёт экземпляры классов, автоматически внедряя макеты или шпионы в тестовом объекте.@Captor : Аннотация для создания экземпляра ArgumentCaptor, который захватывает аргументы, переданные в методы для последующих проверок.MockitoExtension, что делает аннотации Mockito (@Mock, @Spy, @Captor, @InjectMocks) первоклассными гражданами в JUnit 5 тестах.Использование Mockito значительно упрощает процесс создания надёжных модульных тестов, обеспечивая разработчикам гибкие инструменты для имитации сложных взаимодействий в программном обеспечении.