gpt4 book ai didi

java - Spring JPA 规范 API 的 Mockito 不完全执行动态查询

转载 作者:行者123 更新时间:2023-12-02 09:30:39 26 4
gpt4 key购买 nike

我有以下具有动态查询的服务类。

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,所以我不确定我是否在这里遗漏了导致此行为的某些内容。

如何确保从代码覆盖率的角度执行所有行。

最佳答案

Specification 是函数式接口(interface),您返回的函数将由 spring 在后台调用(当您将其传递给合适的存储库方法之后)。在测试中,您模拟该 repostiory 方法,因此没有机会执行该返回的函数。

Specification情况下,该函数被称为toPredicate()

https://github.com/spring-projects/spring-data-jpa/blob/master/src/main/java/org/springframework/data/jpa/domain/Specification.java#L104

关于java - Spring JPA 规范 API 的 Mockito 不完全执行动态查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58017010/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com