Skip to content
Roman Kuzmin edited this page Feb 17, 2025 · 3 revisions

📌 Тестирование в проекте StarBank

🔹 Общая концепция тестирования

Тестирование в проекте StarBank включает несколько уровней проверки:

  • Модульные тесты (Unit-тесты) – проверка отдельных компонентов (сервисов, обработчиков правил, репозиториев).
  • Интеграционные тесты – проверка взаимодействия между сервисами и базой данных.
  • Тестирование API – проверка корректности работы REST API.

Тесты расположены в каталоге src/test/java/ и написаны с использованием JUnit 5 и Mockito.


🔹 Модульные тесты

📌 RecommendationServiceTest

Описание:

  • Проверяет работу сервиса рекомендаций.
  • Проверяет вызовы 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());
}

📌 RuleServiceTest

Описание:

  • Проверяет работу RuleServiceImpl, включая методы проверки правил.
  • Тестирует кеширование вызовов с Spring Cache.
  • Проверяет статистику срабатываний.

Ключевые тесты:

@Test
void testCheckRulesForUser_ShouldReturnTrueWhenAllRulesMatch() {
    when(ruleHandler.evaluate(anyString(), any())).thenReturn(true);
    
    boolean result = ruleService.checkRulesForUser("user1", ruleSet);
    
    assertTrue(result);
}

📌 TelegramBotTest

Описание:

  • Проверяет обработку команд 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("Рекомендация найдена"));
}

🔹 Интеграционные тесты

📌 RecommendationControllerTest

Описание:

  • Проверяет взаимодействие 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());
}

📌 RuleControllerTest

Описание:

  • Проверяет корректность работы эндпоинтов /rule.
  • Проверяет добавление и удаление правил.
  • Использует MockMvc для тестирования контроллеров без запуска сервера.

Ключевые тесты:

@Test
void testCreateRule_ShouldReturn200() throws Exception {
    mockMvc.perform(post("/rule")
            .contentType(MediaType.APPLICATION_JSON)
            .content(jsonRule))
            .andExpect(status().isOk());
}

🔹 Тестирование API через Swagger

Swagger UI предоставляет удобный интерфейс для тестирования API.

  1. Запустите приложение.
  2. Перейдите по адресу:
    http://localhost:8080/swagger-ui.html
    
  3. Проверьте, что все эндпоинты возвращают корректные ответы.

🔹 Запуск тестов

📌 Запуск всех тестов

mvn test

📌 Запуск конкретного теста

mvn -Dtest=RecommendationServiceTest test

📌 Запуск тестов с логированием

mvn test -Dlog.level=DEBUG

📌 Итог

  • Модульные тесты проверяют отдельные сервисы и обработчики правил.
  • Интеграционные тесты тестируют REST API и базу данных.
  • Swagger UI можно использовать для ручного тестирования API.
  • JUnit 5 и Mockito обеспечивают гибкость тестирования.
  • Тестирование Telegram Bot покрывает обработку команд и взаимодействие с BotService.

Clone this wiki locally