Тестовая сущность Spring Junit не сохранена в хранилище - PullRequest
1 голос
/ 12 февраля 2020

Я пытаюсь проверить метод обслуживания, который перечисляет все сущности. Метод выглядит следующим образом:

@Test
public void listAllProfiles() {
  Profile sampleProfile = Profile.createWithDefaultValues();
  profileRepository.save(sampleProfile);

  ProfileService profileService = new ProfileService(profileRepository, new ModelMapper());
  List<ProfileDto> profiles = profileService.listAllProfiles();
  ProfileDto lastProfile = profiles.get(profiles.size() - 1);

  assertEquals(sampleProfile.getId(), lastProfile.getId());
}

Сбой теста: IndexOutOfBoundsException: Index -1 out of bounds for length 0

Я обнаружил, что sampleProfile, вероятно, не сохраняется во время теста. Когда я регистрирую profileRepository.findAll().size(), значение всегда равно 0.

Что за проблема с моим тестом?

1 Ответ

3 голосов
/ 12 февраля 2020

Если вы хотите проверить свой ProfileService, вам нужно смоделировать причину profileRepository, если вы этого не сделаете, то вы на самом деле проводите интеграционный тест.

Юнит-тестирование - это тестирование небольших юнитов, если есть какие-то зависимости от этих юнитов, которые вы должны имитировать (вручную или с помощью фреймворка, Mockito является наиболее распространенным в Java world).

Если ваша служба использует репозиторий для извлечения всех профилей, которые вы должны смоделировать для этого вызова, что-то вроде этого:

 List<Profile> profilesList = Arrays.asList(new Profile("Profile 1"), new Profile("Proiile 2"));
 given(profileRepository.findAll()).willAnswer((Answer<List>) invocation -> profilesList);

Так что вам не следует ничего сохранять в базе данных (на самом деле, вы вообще не должны взаимодействовать с базой данных, когда вы тестируете модуль), вы просто издеваетесь над репозиторием, который вы используете в своей службе. Вот проект Я написал несколько месяцев go, где я фактически решил ту же самую проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...