【问题标题】:How to mock CriteriaQuery.where() followed by order by如何模拟 CriteriaQuery.where() 后跟 order by
【发布时间】:2018-02-24 08:24:23
【问题描述】:

我在哪里上课

CriteriaQuery<Entity> cq=criteriaQuery.root<Entity>();
.....
.....
cq.where(predictes.toArray(new Predicate[0])).orderBy(criteriaBuilder.asc(root.get(ENTITY.COLUMNNAME))

我需要模拟这条线,无法通过这条线。 我试过了

mockito.doReturn(Path).when(root).get(....);
mockito.doReturn(Order).when(criteriabuilder).asc(Path);

这也没有帮助我实现

【问题讨论】:

  • 我不相信模拟 CriteriaQuery 构造细节的测试的价值。我认为你应该对 CriteriaQuery 的使用有一个更高的抽象,并模拟这个抽象。

标签: java jpa criteria predicate


【解决方案1】:

我建议模拟存储库方法而不是 CriteriaQuery 构造,在你的模拟类中使用类似这样的内容:

    @Mock
    CustomRepository customRepository;
    Mockito.when(customRepository.findEntity(Matchers.any()))
            .thenReturn(entity);

【讨论】:

  • 问题是否表明正在使用 Spring (Data JPA)?
  • 不,问题并没有说它使用 Spring(Data JPA)。
  • 那你为什么要回答关于 spring data jpa jparepository 的问题?
  • 在我的回答中,CustomRepository 的定义与实现无关,即findEntitiy 方法可以使用 Spring Data 实现,也可以按照要求使用 Criteria。
猜你喜欢
  • 1970-01-01
  • 2020-11-19
  • 2010-11-21
  • 1970-01-01
  • 2011-12-15
  • 2013-01-25
  • 2023-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多