Ответ
Имею практический опыт написания модульных тестов с использованием JUnit 5 и Mockito для изоляции тестируемого кода.
Типичная структура теста (Given-When-Then):
@Test
void getUserById_ShouldReturnUser_WhenUserExists() {
// Given (Подготовка данных и моков)
Long userId = 1L;
User expectedUser = new User(userId, "John");
when(userRepository.findById(userId)).thenReturn(Optional.of(expectedUser));
// When (Вызов тестируемого метода)
User actualUser = userService.getUserById(userId);
// Then (Проверка утверждений и взаимодействий)
assertNotNull(actualUser);
assertEquals(expectedUser.getId(), actualUser.getId());
verify(userRepository, times(1)).findById(userId); // Верификация вызова мока
}
Ключевые навыки и принципы:
- Изоляция: Использование
@Mock,@InjectMocks,Mockito.mock()для замены зависимостей (репозиториев, внешних сервисов). - Покрытие: Написание тестов для сервисного слоя, утилитных классов, сложной бизнес-логики.
- Параметризованные тесты: Использование
@ParameterizedTestи@CsvSourceдля проверки множества сценариев. - Принцип FIRST: Следование принципам Fast, Independent, Repeatable, Self-Validating, Timely.
- Прагматичный подход: Фокус на покрытии критических путей и edge-кейсов, а не на достижении 100% coverage любой ценой.