- •Цель работы
- •Теоретическая часть
- •JUnit
- •Mockito
- •Ход выполнения работы
- •Часть 0. Подготовка
- •Часть 1. Первая структура unit-теста на JUnit
- •Часть 2. Основные возможности JUnit для unit-тестов
- •2.1. Проверка значений
- •2.2. Проверка исключений
- •2.3. Методы жизненного цикла
- •Часть 3. Что такое unit-тест в нашем приложении
- •Часть 4. Первый unit-тест с Mockito для UserService
- •Часть 5. Проверка вызова метода репозитория через verify()
- •Часть 6. Тестирование NotificationService
- •Часть 7. Проверка исключений в сервисах
- •Часть 8. Mock, Stub и Spy
- •Mock
- •Stub
- •Часть 9. Когда не нужно использовать mock-объекты
- •Часть 10. Базовое тестирование контроллера
- •Часть 11. Разница между unit-тестом и интеграционным тестом
- •Unit-тест
- •Интеграционный тест
- •Часть 12. Проверка работы тестов в IntelliJ IDEA
- •Самостоятельные задания
- •Контрольные вопросы
savedNotification.setRecipient(user);
when(userRepository.findById(1L)).thenReturn(Optional.of(user));
when(notificationRepository.save(any(Notification.class))).thenReturn(savedNotification);
Notification result = notificationService.createNotification(dto);
assertNotNull(result); assertEquals("Напоминание", result.getTitle());
assertEquals(NotificationChannel.EMAIL, result.getChannel()); assertEquals(user, result.getRecipient());
}
}
В этом примере mock-объекты позволяют полностью изолировать NotificationService от реальной базы данных.
Часть 7. Проверка исключений в сервисах
В реальном приложении важно тестировать не только успешные сценарии, но и ошибки.
Например, в NotificationService пользователь может не найтись по recipientId .
package org.example.service;
import org.example.model.dto.NotificationDto; import org.example.model.enums.NotificationChannel;
import org.example.repository.NotificationRepository; import org.example.repository.UserRepository;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class) class NotificationServiceExceptionTest {
@Mock
private NotificationRepository notificationRepository;
@Mock
private UserRepository userRepository;
10
