我有一个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();
[...]
}
答案 0 :(得分:1)
您绝不会将存储库模拟设置为对bean服务的依赖。
在这里,您可以模拟正在运行的Spring容器的框架:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = WhatAreWeEatingApp.class)
这不是单元测试。因此,您想使用Spring Boot中的@MockBean
来模拟容器中的bean,而不是Mockito中的@Mock
来模拟容器外部创建的实例。
不喜欢自动促销信息,但是this question应该可以为您提供帮助。
要走得更远,您无需运行容器即可测试服务方法。因此,您可能应该删除Spring Boot测试注释并编写一个真实的单元测试。