Ответ
Использую многоуровневый подход, фокусируясь на модульных и интеграционных тестах.
1. Модульные тесты (JUnit 5 + Mockito):
@Test
void calculateDiscount_ShouldApplyTenPercent_ForPremiumUser() {
// Arrange
User premiumUser = new User("John", Tier.PREMIUM);
DiscountService service = new DiscountService();
// Act
BigDecimal discount = service.calculateDiscount(premiumUser, new BigDecimal("100.00"));
// Assert
assertEquals(new BigDecimal("10.00"), discount);
}
2. Интеграционные тесты: Проверяю взаимодействие с БД, внешними API (с использованием тестовых контейнеров или мок-серверов).
3. Практики:
- Покрытие: Стремлюсь к высокому покрытию критических путей, а не к 100% ради метрики.
- Читаемость: Имена тестов по шаблону
[Method]_[Scenario]_[ExpectedResult]. - CI/CD: Все тесты автоматически запускаются в пайплайне сборки (Maven/Gradle).
Цель: Раннее обнаружение регрессий и уверенность при рефакторинге.