[英]Nullpointer when using Mockito for unit tests
我正在为我的应用程序创建一个 Spring Boot API。 我正在尝试使用 mockito 对我的服务实现进行单元测试来模拟细节。 该服务将向数据库添加一个新的建筑实体。 下面是服务实现和测试实现。 建筑服务:
@Slf4j
@Service
public class BuildingServiceImpl implements BuildingService {
private BuildingRepository buildingRepository;
private BuildingRequestToEntityMapper buildingRequestToEntityMapper;
public BuildingServiceImpl(BuildingRepository buildingRepository, BuildingRequestToEntityMapper
buildingRequestToEntityMapper){
this.buildingRepository=buildingRepository;
this.buildingRequestToEntityMapper=buildingRequestToEntityMapper;
}
public HttpStatus addBuilding(BuildingRequest buildingRequest){
log.info("Inside addBuilding() service");
BuildingEntity buildingEntity = buildingRequestToEntityMapper.map(buildingRequest);
buildingRepository.save(buildingEntity);
log.info("Building saved "+ buildingEntity);
return HttpStatus.CREATED;
}
BuildingServiceImpl_UT
@RunWith(MockitoJUnitRunner.class)
public class BuildingServiceImpl_UT {
@Mock
BuildingRequestToEntityMapper buildingRequestToEntityMapper;
@Mock
BuildingRepository buildingRepository;
@InjectMocks
BuildingServiceImpl buildingServiceImpl;
@Test
public void buildingService_MapsRequest_AndSaveEntity(){
BuildingRequest buildingRequest = BuildingRequest.builder()
.name("TestName")
.telephone("4444444444")
.postcode("TEst")
.address("testAddress").build();
when(buildingServiceImpl.addBuilding(any(BuildingRequest.class))).thenReturn(HttpStatus.CREATED);
when(buildingRepository.save(any(BuildingEntity.class))).thenReturn(new BuildingEntity());
buildingServiceImpl.addBuilding(buildingRequest);
verify(buildingRepository, times(1)).save(any());
}
我已经模拟了映射器和存储库并将它们注入到服务中,但是当我运行测试时,我在测试类中的第一个 when().thenReturn() 语句中得到一个空指针异常。 请任何帮助。 谢谢
我不明白你的第一个 when().thenReturn()! 您尝试在buildingServiceImpl上执行此操作,这不是模拟! 此外,这毫无意义,因为您想测试此方法! 我认为您应该为模拟buildingRequestToEntityMapper定义 when().thenReturn() ,但在您的实现中,您不需要为buildingRequestToEntityMapper.map()定义返回。 在这种情况下,变量buildingEntity将具有值null ,它应该在您的测试用例中工作。
@RunWith(MockitoJUnitRunner.class)
public class BuildingServiceImpl_UT {
@Mock
BuildingRequestToEntityMapper buildingRequestToEntityMapper;
@Mock
BuildingRepository buildingRepository;
@InjectMocks
BuildingServiceImpl buildingServiceImpl;
@Test
public void buildingService_MapsRequest_AndSaveEntity(){
BuildingRequest buildingRequest = BuildingRequest.builder()
.name("TestName")
.telephone("4444444444")
.postcode("TEst")
.address("testAddress").build();
when(buildingRepository.save(any(BuildingEntity.class))).thenReturn(new BuildingEntity());
buildingServiceImpl.addBuilding(buildingRequest);
verify(buildingRepository, times(1)).save(any());
verify(buildingRequestToEntityMapper).map(any());
}
这个:
when(buildingServiceImpl.addBuilding(any(BuildingRequest.class))).thenReturn(HttpStatus.CREATED);
不是必须的,你想测试方法: addBuilding
不是模拟它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.