Java for Beginner
675 subscribers
559 photos
156 videos
12 files
858 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Тестируйте edge-кейсы

Убедитесь, что ваши тесты покрывают не только "счастливый путь", но и граничные случаи:
- Ошибки валидации.
- Отсутствие данных в базе.
- Нарушение уникальности.
- Исключения в транзакциях.


- Пример:

  @Test
void testUserNotFound() {
assertThatThrownBy(() -> userService.findUserById(999L))
.isInstanceOf(UserNotFoundException.class);
}


Используйте моки для сложных зависимостей

Моки позволяют изолировать тестируемый компонент от внешних зависимостей, таких как базы данных, внешние API или другие сервисы.

- Пример с Mockito:

  @Test
void testSendEmail() {
EmailService emailService = mock(EmailService.class);
UserService userService = new UserService(emailService);

userService.notifyUser("user@example.com");

verify(emailService).sendEmail("user@example.com");
}


Тестируйте асинхронный код

Для тестирования асинхронных методов используйте CompletableFuture и CountDownLatch.

- Пример:

  @Test
void testAsyncMethod() throws Exception {
CountDownLatch latch = new CountDownLatch(1);
CompletableFuture<String> future = asyncService.asyncMethod();

future.whenComplete((result, ex) -> {
assertThat(result).isEqualTo("Done");
latch.countDown();
});

latch.await(2, TimeUnit.SECONDS);
assertThat(future.isDone()).isTrue();
}


Тестируйте события

Spring предоставляет механизм событий через ApplicationEventPublisher. Убедитесь, что события публикуются и обрабатываются корректно.

- Пример:

  @Test
void testEventPublication() {
eventService.publishEvent("Test Message");

assertThat(events.stream(CustomEvent.class))
.hasSize(1)
.first()
.satisfies(event -> assertThat(event.getMessage()).isEqualTo("Test Message"));
}


Оптимизируйте производительность тестов

Минимизируйте контекст Spring:

Используйте
@DataJpaTest, @WebMvcTest и другие специализированные аннотации вместо @SpringBootTest, если это возможно.

Кэшируйте контекст Spring:

Если тесты используют один и тот же контекст, Spring может кэшировать его для ускорения выполнения.

Документируйте тесты

Используйте понятные имена тестов:
Имена тестов должны отражать их цель (например, testCreateUser_withNullName_throwsException).


Добавляйте комментарии:
Если тест сложный, добавьте пояснения, чтобы облегчить понимание.


Автоматизируйте тестирование

Интегрируйте тесты в CI/CD:
Убедитесь, что тесты запускаются автоматически при каждом коммите.

Используйте инструменты для анализа покрытия:
Например, JaCoCo для измерения покрытия кода тестами.

#Java #Training #Spring #Testing #Mockito