Sobes.tech
Senior
55

Napišite JUnit testove za RecommenderServiceImpl koji pokrivaju osnovnu funkcionalnost

Компаније где су питане
VKVK

Одговор од АИ

sobes.tech АИ

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