【发布时间】:2021-06-08 12:07:19
【问题描述】:
我有一个超类,其中包含 JpaRepository
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
有人可以告诉我什么是模拟它的正确方法吗?
【问题讨论】:
标签: spring unit-testing junit mockito