Sobes.tech
Назад к вопросам
Senior
5

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

Компании, где спрашивали
VKVK

Ответ от нейросети

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 для мокирования зависимостей.
  • Проверяется нормальная работа, пустой результат и обработка исключений.
  • Можно добавить тесты для граничных случаев и других методов сервиса.