首页 > 解决方案 > 如何模拟 CriteriaQuery.where(EntityRoot.get(ID).in(List)

问题描述

我正在尝试模拟功能块

    @Mock
    private EntityManager entityManager;

    @Mock
    private CriteriaBuilder criteriaBuilder;

    @Mock
    CriteriaQuery<Entity> criteriaQuery;

    @Mock
    TypedQuery<Entity> typedQuery;

    @Mock
    Predicate predicate;

    @Mock
    Root<Entity> EntityRoot;



 criteriaQuery.where(criteriaBuilder.and(
    EntityRoot.get(ID).in(request.getIdList()),
    criteriaBuilder.greaterThanOrEqualTo(EntityRoot.get(columnName),
                                    Request.getTimeRangeFilter().getStartDate())));

ID - 静态字符串

我尝试用下面的代码模拟

when(criteriaQuery.where(criteriaBuilder.and(predicate, predicate))).thenReturn(criteriaQuery);

但是为了线EntityRoot.get(ID).in(request.getIdList())

我收到以下错误

在此处输入图像描述

我在这里做错了什么

标签: unit-testingjunitmockitocriteriapredicatebuilder

解决方案


@Mock
Path<Object> path; 

when(EntityRoot.get(anyString())).thenReturn(path);
        when(path.in(Mockito.anyList())).thenReturn(predicate);

这个解决方案终于奏效了。


推荐阅读