Spring Mock repository.count () всегда возвращает 0 - PullRequest
0 голосов
/ 03 марта 2019

У меня есть проект весенней загрузки, в котором я пытаюсь смоделировать свой репозиторий для тестов.Я хотел бы, чтобы мой repository.count () возвращал 30L, но на самом деле он всегда возвращает 0

@Service
@Transactional
public class DishServiceImpl implements DishService {

    private final DishRepository dishRepository;

    public DishServiceImpl(DishRepository dishRepository) {
        this.dishRepository = dishRepository;
    }

    @Override
    public List<Dish> searchDishes() {

        long countDish = dishRepository.count();

        System.out.println(countDish);
        [...]
    }
}

@RunWith(SpringRunner.class)
@SpringBootTest(classes = WhatAreWeEatingApp.class)
@Transactional
public class DishServiceTest{

    @Mock
    private DishRepository dishRepository;

    @Autowired
    private DishService dishService;

    @Test
    public void test(){

        when(dishRepository.count()).thenReturn(30L);
        dishService.searchDishes();

        [...]
    }

1 Ответ

0 голосов
/ 03 марта 2019

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

@RunWith(SpringRunner.class)
@SpringBootTest(classes = WhatAreWeEatingApp.class)

Это не модульный тест.Поэтому вы хотите использовать @MockBean из Spring Boot для макета боба в контейнере, а не @Mock из Mockito для насмешки экземпляров, созданных вне контейнера.
Не нравится автоматическая рекламная публикация, но этот вопрос должно вам помочь.

Чтобы идти дальше, вам не нужно запускать контейнер для проверки метода обслуживания.Поэтому вам, вероятно, следует удалить аннотацию теста Spring Boot и написать реальный модульный тест.

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