【发布时间】:2022-01-10 20:36:37
【问题描述】:
我正在尝试准备一些简单的停车服务 API,但我一直在测试。
我有 ParkingService 之类的:
@Service
@RequiredArgsConstructor
public class ParkingService {
private final CarsAndParkingsRepository carsAndParkingsRepository;
private final ParkingsRepository parkingsRepository;
以及存储库中的简单自定义方法
public boolean checkFreeSlots(String idParking) {
return carsAndParkingsRepository.findAmountOfTakenSlotsOnParking(idParking)
< parkingsRepository.findByIdParking(idParking).getNumberOfParkingSlots();
}
和测试:
@Test
public void checkFreeSlotsIfIsCorrect() {
//given
//when
when(carsAndParkingsRepository.findAmountOfTakenSlotsOnParking("5")).thenReturn(5);
when(parkingsRepository.findByIdParking("5").getNumberOfParkingSlots()).thenReturn(10);
when(parkingService.checkFreeSlots("5")).thenCallRealMethod();
boolean result = parkingService.checkFreeSlots("5");
//then
assertEquals(true, result);
}
但问题是我在行得到 NullPointerException:
when(parkingsRepository.findByIdParking("5").getNumberOfParkingSlots()).thenReturn(10);
以前的模拟方法 when(carsAndParkingsRepository.findAmountOfTakenSlotsOnParking("5")).thenReturn(5) 工作正常,它的返回 5 但在下一行其他存储库抛出异常。 有没有其他方法可以测试它或者我做错了什么? Ofc,我已经模拟了存储库:)
【问题讨论】:
-
存根时,方法会照常调用。
when(parkingsRepository.findByIdParking("5").getNumberOfParkingSlots())因为你没有存根 findByIdParking,所以它返回 null,因此是 NPE。 -
我如何存根 findByIdParking?没听说过
标签: spring hibernate mocking mockito integration-testing