-
Notifications
You must be signed in to change notification settings - Fork 2
Tests
Roman Kuzmin edited this page Feb 17, 2025
·
3 revisions
Тестирование в проекте StarBank включает несколько уровней проверки:
- Модульные тесты (Unit-тесты) – проверка отдельных компонентов (сервисов, обработчиков правил, репозиториев).
- Интеграционные тесты – проверка взаимодействия между сервисами и базой данных.
- Тестирование API – проверка корректности работы REST API.
Тесты расположены в каталоге src/test/java/ и написаны с использованием JUnit 5 и Mockito.
Описание:
- Проверяет работу сервиса рекомендаций.
- Проверяет вызовы
RuleServiceдля фильтрации правил. - Использует Mockito для заглушки зависимостей
UserRepositoryиRuleService.
Ключевые тесты:
@Test
void testGetRecommendations_ShouldReturnValidRecommendations() {
when(ruleService.getAllRules()).thenReturn(List.of(ruleSet));
when(ruleService.checkRulesForUser(anyString(), any())).thenReturn(true);
RecommendationResponse response = recommendationService.getRecommendations("user1");
assertFalse(response.getRecommendations().isEmpty());
}Описание:
- Проверяет работу
RuleServiceImpl, включая методы проверки правил. - Тестирует кеширование вызовов с Spring Cache.
- Проверяет статистику срабатываний.
Ключевые тесты:
@Test
void testCheckRulesForUser_ShouldReturnTrueWhenAllRulesMatch() {
when(ruleHandler.evaluate(anyString(), any())).thenReturn(true);
boolean result = ruleService.checkRulesForUser("user1", ruleSet);
assertTrue(result);
}Описание:
- Проверяет обработку команд Telegram бота.
- Проверяет вызовы обработчиков команд (
BotHandler). - Использует Mockito для заглушки зависимостей
BotService.
Ключевые тесты:
@Test
void testHandleStartCommand_ShouldSendWelcomeMessage() {
long chatId = 12345L;
startMessageHandler.handleMessage(chatId, "/start");
verify(botService, times(1)).sendMessage(eq(chatId), contains("Привет! Я бот, который выдает рекомендации"));
}@Test
void testHandleRecommendCommand_ShouldReturnRecommendation() {
long chatId = 12345L;
when(botService.getBotRecommendationByUsername(anyString())).thenReturn("Рекомендация найдена");
recommendationMessageHandler.handleMessage(chatId, "/recommend TestUser");
verify(botService, times(1)).sendMessage(eq(chatId), contains("Рекомендация найдена"));
}Описание:
- Проверяет взаимодействие REST API с
RecommendationService. - Запускается с Spring Boot Test (
@SpringBootTest). - Использует TestRestTemplate для выполнения HTTP-запросов.
Ключевые тесты:
@Test
void testGetRecommendations_ShouldReturn200() {
ResponseEntity<RecommendationResponse> response = restTemplate.getForEntity("/recommendation/user1", RecommendationResponse.class);
assertEquals(HttpStatus.OK, response.getStatusCode());
}Описание:
- Проверяет корректность работы эндпоинтов
/rule. - Проверяет добавление и удаление правил.
- Использует MockMvc для тестирования контроллеров без запуска сервера.
Ключевые тесты:
@Test
void testCreateRule_ShouldReturn200() throws Exception {
mockMvc.perform(post("/rule")
.contentType(MediaType.APPLICATION_JSON)
.content(jsonRule))
.andExpect(status().isOk());
}Swagger UI предоставляет удобный интерфейс для тестирования API.
- Запустите приложение.
- Перейдите по адресу:
http://localhost:8080/swagger-ui.html - Проверьте, что все эндпоинты возвращают корректные ответы.
mvn testmvn -Dtest=RecommendationServiceTest testmvn test -Dlog.level=DEBUG- Модульные тесты проверяют отдельные сервисы и обработчики правил.
- Интеграционные тесты тестируют REST API и базу данных.
- Swagger UI можно использовать для ручного тестирования API.
- JUnit 5 и Mockito обеспечивают гибкость тестирования.
-
Тестирование Telegram Bot покрывает обработку команд и взаимодействие с
BotService.