Какую библиотеку в Java используют с аннотацией @Mock?

«Какую библиотеку в Java используют с аннотацией @Mock?» — вопрос из категории Тестирование, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Аннотация @Mock является частью библиотеки Mockito — стандартного фреймворка для создания mock-объектов в unit-тестах Java.

Как это работает:

  1. @Mock помечает поле, которое должно быть заменено mock-объектом.
  2. Для инициализации этих полей необходимо вызвать 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>