Spring Mock repository.count()总是返回0

时间:2019-03-03 11:59:00

标签: java spring-boot mockito

我有一个Spring Boot项目,在这里我要模拟我的存储库以进行测试。 我希望我的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 :(得分:1)

您绝不会将存储库模拟设置为对bean服务的依赖。
在这里,您可以模拟正在运行的Spring容器的框架:

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

这不是单元测试。因此,您想使用Spring Boot中的@MockBean来模拟容器中的bean,而不是Mockito中的@Mock来模拟容器外部创建的实例。
不喜欢自动促销信息,但是this question应该可以为您提供帮助。

要走得更远,您无需运行容器即可测试服务方法。因此,您可能应该删除Spring Boot测试注释并编写一个真实的单元测试。