У меня есть следующий класс обслуживания с динамическим запросом.
public class CarService {
public Page<Cars> getAllCars(CarRequest request, ,, String carCarrier, String carNumber,Pageable pageRequest){
String userCarrier = request.getSubCarrier();
Specification <Car> carSpecification = null;
carSpecification = getCarDetails(request, carCarrier, carNumber);
return carRepository.findAll(carSpecification, pageRequest);
}
public Specification<Car> getCarDetails(CarRequest request, String carCarrier, String carNumber) {
System.out.println("I am in query");
return (Root<Car> root, CriteriaQuery<?> query, CriteriaBuilder cb) -> {
System.out.println("I am executing query");
List<Predicate> predicates = new ArrayList<>();
if(StringUtils.isNotBlank(request.getCarColor())) {
predicates.add(cb.and(cb.equal(root.get(“carColor”), request.getCarColor())));
}
if(StringUtils.isNotBlank(carCarrier)) {
predicates.add(cb.and(root.get("carCarrier”),carCarrier)));
}
if(StringUtils.isNotBlank(carNumber)) {
predicates.add(cb.and(cb.equal(root.get("carNumber"), carNumber)));
}
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
};
}
}
Ниже приведен мой тестовый класс, в котором я пытаюсь протестировать динамический запрос.
public class CarServiceTest {
@Mock
private CarService carService;
@Test
public void test_cars() {
Pageable pageRequest = new PageRequest(0,20);
CarRequest request = new CarRequest();
request.setCarColor(“Red”);
request.setCarMake(“Nissan”);
when(carRepository.findAll(Mockito.any(Specification.class), Mockito.eq(pageRequest)))
.thenReturn(Mockito.mock(Page.class));
Assert.assertNotNull(carService.getAllCars(request, pageRequest));
}
}
Приведенный выше тестовый примерработает, но он просто входит в getCarDetails и печатает первую строку «Я в запросе» и возвращает.Проверка условных предложений в запросе не идет дальше.
Я также пытался вызывать метод непосредственно из тестового класса, так как
carService.getCarDetails(carRequest. "ABC", “A123”);
Все тот же результат.Я недавно начал с Mockito, так что я не уверен, что я что-то здесь упускаю, что вызывает такое поведение.
Как я могу убедиться, что все мои строки выполняются с точки зрения покрытия кода.