我正在嘗試準備一些簡單的停車服務 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) 作業正常,它的 return 5 但在下一行其他存盤庫拋出例外。有沒有其他方法可以測驗它或者我做錯了什么?Ofc,我模擬了存盤庫:)
uj5u.com熱心網友回復:
問題在于:
when(parkingsRepository.findByIdParking("5").getNumberOfParkingSlots()).thenReturn(10);
的引數when需要在呼叫之前進行評估:
parkingsRepository.findByIdParking("5")被呼叫并回傳nullnull.getNumberOfParkingSlots()被呼叫并拋出 NPE
您有以下選擇:
使用 POJO 進行停車
var parking5 = new Parking(
5, //id
10, //number of slots
// ... other arguments
);
when(parkingsRepository.findByIdParking("5")).thenReturn(parking5);
這是首選選項,但如果您的物件難以構造(hibernate 物體不應該是這種情況),您可以使用模擬
使用停車場的模擬
var parking5 = mock(Parking.class);
when(parkingsRepository.findByIdParking("5")).thenReturn(parking5);
when(parking5.getNumberOfParkingSlots()).thenReturn(10);
請注意,您可以在此方法中使用鏈式呼叫,但這需要您按順序存根方法。
var parking5 = mock(Parking.class);
when(parkingsRepository.findByIdParking("5")).thenReturn(parking5);
when(parkingsRepository.findByIdParking("5").getNumberOfParkingSlots()).thenReturn(10);
在我看來,第一種風格更容易使用,并且可以讓你重新排序存根。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/408627.html
標籤:
