首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CriteriaQuery return nullpointerexception模拟

CriteriaQuery return nullpointerexception模拟
EN

Stack Overflow用户
提问于 2016-07-02 17:12:36
回答 0查看 2.2K关注 0票数 1

我使用mockito开始我的测试。首先,我需要测试.findAll(),这是一个CriteriaQuery...

UserFacade扩展了具有此findAll的AbstractFacade。

代码语言:javascript
复制
public abstract class AbstractFacade<T> {

    private Class<T> entityClass;

    public AbstractFacade(Class<T> entityClass) {
        this.entityClass = entityClass;
    }

    protected abstract EntityManager getEntityManager();

    ....

    public List<T> findAll() {
        CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
        CriteriaQuery<T> cq = cb.createQuery(entityClass);
        Root<T> rootEntry = cq.from(entityClass);
        CriteriaQuery<T> all = cq.select(rootEntry);
        TypedQuery<T> allQuery = em.createQuery(all);
        return allQuery.getResultList();
    }
    ...

我的测试:

代码语言:javascript
复制
@RunWith(MockitoJUnitRunner.class)
public class UserFacadeTest {

    public UserFacadeTest() {
    }
    @Mock
    private EntityManager mockedEM;
    @Mock
    private CriteriaQuery mockedCQ;
    @Mock
    private CriteriaQuery mockedCQAll;    
    @Mock
    private Root mockedRoot;
    @Mock
    private CriteriaBuilder mockedCB;
    @Mock
    private TypedQuery mockedTQ;
    private UserFacade userFacade;
    List<User> userList= new ArrayList<>();

    @Before
    public void setUp() {
        userFacade=new UserFacade();
        userFacade.setEm(mockedEM);
        when(mockedEM.getCriteriaBuilder()).thenReturn(mockedCB);
        when(mockedCB.createQuery()).thenReturn(mockedCQ);
        when(mockedCQ.from(User.class)).thenReturn(mockedRoot);
        when(mockedCQ.select(mockedRoot)).thenReturn(mockedCQAll);
        when(mockedEM.createQuery(mockedCQAll)).thenReturn(mockedTQ);
        when(mockedTQ.getResultList()).thenReturn(userList);
    }

    @Test
    public void testFindAll() {
        System.out.println("findAll");
        User user = new User(1, "username", "password", "email", new Date());
        userFacade.create(user);
        verify(mockedEM, times(1)).persist(any());
        userList.add(user);
        //next line cause NullPointerException
        List list=userFacade.findAll();

        assertTrue("Should return 1", 1==list.size());

    }

调试我的测试我看到了这个:

代码语言:javascript
复制
    ....

    public List<T> findAll() {
        CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
        CriteriaQuery<T> cq = cb.createQuery(entityClass); //cq is null!!!!
        Root<T> rootEntry = cq.from(entityClass); //cq is null!!!!
        CriteriaQuery<T> all = cq.select(rootEntry);
        TypedQuery<T> allQuery = em.createQuery(all);
        return allQuery.getResultList();
    }
    ...

所以我想我传递“User.class”是错误的.我也要嘲笑这个?多么?

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38158477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档