【问题标题】:Mocking JpaRepository<E,L> using Mockito使用 Mockito 模拟 JpaRepository<E,L>
【发布时间】: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


    【解决方案1】:

    我想您还应该使用@InjectMocks 注入模拟

    @Mock
    private JpaRepository<Ingredient, Long> jpaRepository;
    
    @InjectMocks
    private BaseServiceImpl baseService
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-03
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多