spring - 模拟 JpaRepository使用 Mockito
问题描述
我有一个包含 JpaRepository<ENTITY, Long> 类型对象的超类。
public class BaseServiceImpl<CREATE_DTO, UPDATE_DTO, RESPONSE_DTO, ENTITY> implements BaseService<CREATE_DTO, UPDATE_DTO, RESPONSE_DTO, ENTITY> {
@Autowired
protected JpaRepository<ENTITY, Long> jpaRepository;
@Autowired
protected BaseMapper<CREATE_DTO, UPDATE_DTO, RESPONSE_DTO, ENTITY> baseMapper;
@Override
public List<RESPONSE_DTO> findAll() {
return jpaRepository.findAll()
.stream()
.map(baseMapper::entityToResponseDto)
.collect(Collectors.toList());
}
@Override
public RESPONSE_DTO findById(Long id) {
return jpaRepository.findById(id)
.map(baseMapper::entityToResponseDto)
.orElseThrow(() -> {
throw new RuntimeException("Entity with id: " + id + " does not exist!");
});
}
@Override
public RESPONSE_DTO save(CREATE_DTO entity) {
return baseMapper.entityToResponseDto(jpaRepository.save(baseMapper.createDtoToEntity(entity)));
}
}
我正在尝试使用 JUnit 和 Mockito 为 findAll 方法编写单元测试。我面临的问题与模拟 BaseServiceImpl 中存在的 JpaRepository 有关。
我试过这样实现
@ExtendWith(MockitoExtension.class)
public class IngredientServiceImplTest {
@Mock
private JpaRepository<Ingredient, Long> jpaRepository;
}
但我得到以下异常:
java.lang.NullPointerException: Cannot invoke "org.springframework.data.jpa.repository.JpaRepository.findAll()" because "this.jpaRepository" is null
有人可以告诉我什么是模拟它的正确方法吗?
解决方案
我想你也应该注入模拟@InjectMocks
@Mock
private JpaRepository<Ingredient, Long> jpaRepository;
@InjectMocks
private BaseServiceImpl baseService
推荐阅读
- google-people-api - 如何只获取真实的联系人照片?
- jquery - JQuery 使用 For 更改同一 HTML 表格单元格上的值
- reactjs - 任务 :app:transformNativeLibsWithMergeJniLibsForDebug 失败
- animation - 使用图像文件而不是 SVG 为书法制作动画
- spring - 如何从弹簧过滤器返回响应为 Json?
- python - 调用 logging.getLogger(__name__) logger.handlers 后的烧瓶丢失
- ruby-on-rails - 从通过 API 在 Rails 中传递的 JSON 创建嵌套属性
- regex - 如何在 Python 中找到一个包含(和不)环绕某个模式的字符串?
- reactjs - React Fullcalendar v4 工具提示
- r - 使用R&dplyr总结——group_by、count、mean、sd