Руководство: использование Mockito для инъекций в JUnit 5
Быстрый ответ
Для быстрой интеграции Mockito в JUnit 5, добавьте в проект зависимость mockito-junit-jupiter
. Для использования аннотаций Mockito в тестах JUnit 5, примените аннотацию @ExtendWith(MockitoExtension.class)
. Вот ключевые моменты:
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
@ExtendWith(MockitoExtension.class)
class QuickTest {
@Mock
MyComponent component; // Ваш надежный подспорье в мире тестирования
@Test
void verifyComponentAction() {
when(component.act()).thenReturn("Done"); // При вызове всегда возвращает "Done"
assertEquals("Done", component.act()); // Убеждаемся, что метод работает как ожидалось
verify(component).act(); // Проверяем, был ли метод действительно вызван
}
}
Создавайте моки с легкостью с помощью @Mock
, имитируйте поведение методов с помощью when().thenReturn()
и проверяйте взаимодействия с помощью verify()
. Благодаря этому, процесс тестирования с Mockito и JUnit 5 становится быстрее и проще.
Процесс перехода: от JUnit 4 к JUnit 5
Переводя тесты с JUnit 4 на JUnit 5, учитывайте, что правила и исполнители JUnit 4 не совместимы с JUnit 5. Используйте @ExtendWith
вместо @RunWith
для интеграции функционала Mockito. Обязательно проверяйте, что моки созданы правильно. Только тогда вы сможете в полной мере использовать возможности расширений JUnit 5.
Искусство создания моков
Особое значение имеет выбор способа внедрения зависимостей – от него во многом зависит результат. Если вы отдаете предпочтение конструкторам, вместо инжекции через поля с @Mock
, воспользуйтесь @InjectMocks
. Таким образом, Mockito будет автоматически создавать тестовые объекты, делая код тестов более коротким и понятным.
Настраивайте свою тестовую среду!
MockitoExtension предлагает обширную функциональность, однако, если вам это мало, создайте собственное расширение, реализовав соответствующие обратные вызовы JUnit 5 (BeforeAllCallback
, BeforeEachCallback
и другие). Это позволит вам гибко настраивать тестовую среду.
Визуализация
Подготовка тестов в JUnit 5 подобна подготовке к представлению:
Сцена JUnit 5 (🎭): [Тестовые случаи]
Актеры Mockito (👥): [Моки]
Затем объедините эти элементы с помощью аннотаций и методов, что обеспечит идеальное выполнение:
@BeforeEach 🛠️ -> Подготовка сцены
@Test 🎬 -> Начало действия
@Mock 🤝 -> Вход персонажей
@ExtendWith(MockitoExtension.class) 🎟️ -> Приглашение для Mockito
Проведите тест с таким же тщательным подходом, как если бы вы репетировали пьесу!
Структурирование вашего теста
Добивайтесь изоляции тестов. Избегайте использования иерархии наследования, которое может привести к хрупким тестам. Сконцентрируйтесь на применении расширений JUnit 5 для создания эффективных и легко поддерживаемых тестов.
Знакомство Kotlin и Mockito
Работая с Kotlin, по максимуму используйте lateinit
с @Mock
для отложенной инициализации моков в тестах JUnit 5. Сохраняйте изящество и экспрессивность кода Kotlin.
Концепция теста JUnit 5
Стремитесь к изоляции тестов. Сократите зависимость ваших тестов от базовой конфигурации класса до минимума и используйте расширения для создания гибких тестов. Обратите внимание на правильное использование @ExtendWith
и @Mock
, чтобы инъекция моков производилась без проблем.
Полезные материалы
- Mockito Extension – mockito-junit-jupiter 5.10.0 javadoc — официальная документация по интеграции Mockito в JUnit 5.
- Руководство пользователя JUnit 5 — детальное руководство по использованию расширений JUnit 5, включая Mockito.
- GitHub – mockito/mockito — прекрасный источник примеров использования Mockito, а также последних обновлений и фиксов ошибок.
- Первые шаги | Тестирование веб-слоя — практическое руководство по тестированию в Spring Framework с использованием JUnit 5 и Mockito.
- Модульные тесты с Mockito – Учебник — учебник от Vogella по настройке и использованию Mockito для модульного тестирования.