Sobes.tech
Senior
48

Напишите JUnit тесты для RecommenderServiceImpl, покрывающие основную функциональность

Qaerda so'ralgan kompaniyalar
VKVK

AIdan javob

sobes.tech AI

Для написания JUnit тестов для класса RecommenderServiceImpl нужно покрыть основные сценарии работы сервиса: получение рекомендаций, обработку ошибок, работу с пустыми данными и т.п. Предположим, что сервис зависит от какого-то репозитория или внешнего API, тогда стоит замокать эти зависимости.

Пример теста с использованием JUnit 5 и Mockito:

import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

class RecommenderServiceImplTest {

    @Mock
    private RecommendationRepository recommendationRepository;

    @InjectMocks
    private RecommenderServiceImpl recommenderService;

    @BeforeEach
    void setUp() {
        MockitoAnnotations.openMocks(this);
    }

    @Test
    void testGetRecommendations_ReturnsList() {
        // Подготовка данных
        List<String> mockRecommendations = List.of("item1", "item2");
        when(recommendationRepository.findRecommendations(anyString())).thenReturn(mockRecommendations);

        // Вызов тестируемого метода
        List<String> result = recommenderService.getRecommendations("user123");

        // Проверка результата
        assertNotNull(result);
        assertEquals(2, result.size());
        assertEquals("item1", result.get(0));
    }

    @Test
    void testGetRecommendations_EmptyList() {
        when(recommendationRepository.findRecommendations(anyString())).thenReturn(Collections.emptyList());

        List<String> result = recommenderService.getRecommendations("user123");

        assertNotNull(result);
        assertTrue(result.isEmpty());
    }

    @Test
    void testGetRecommendations_RepositoryThrowsException() {
        when(recommendationRepository.findRecommendations(anyString())).thenThrow(new RuntimeException("DB error"));

        assertThrows(RuntimeException.class, () -> {
            recommenderService.getRecommendations("user123");
        });
    }
}

В этом примере:

  • Используется Mockito для мокирования зависимостей.
  • Проверяется нормальная работа, пустой результат и обработка исключений.
  • Можно добавить тесты для граничных случаев и других методов сервиса.