Ответ
Аннотация @Mock является частью библиотеки Mockito — стандартного фреймворка для создания mock-объектов в unit-тестах Java.
Как это работает:
@Mockпомечает поле, которое должно быть заменено mock-объектом.- Для инициализации этих полей необходимо вызвать
MockitoAnnotations.openMocks(this)(в JUnit 4 через@RunWith(MockitoJUnitRunner.class)или@Beforeметод, в JUnit 5 — через@ExtendWith(MockitoExtension.class)).
Пример (JUnit 5 + Mockito):
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.List;
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;
@ExtendWith(MockitoExtension.class)
class ServiceTest {
@Mock
private List<String> mockedList; // Mockito создаст mock-объект
@Test
void testMockBehavior() {
// Задаем поведение mock-объекта
when(mockedList.get(0)).thenReturn("first");
// Проверяем
assertEquals("first", mockedList.get(0));
// Верифицируем вызов
verify(mockedList).get(0);
}
}
Зависимость Maven:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>