参数名为查询测试与mockito

时间:2011-06-22 06:08:53

标签: java jpa junit mockito named-query

我想为我的dao写一个Junit测试,但是我遇到了问题。这是我想要测试的方法:

 public boolean boo(final String param) {
            final Query query = this.entityManager.createNamedQuery("queryName");
            query.setParameter(1, param);
            boolean isExists = false;
            if(query.getResultList().size() != 0) {
                isExists = true;
            }
            return isExists;
        }

此方法的问题是:

query.setParameter(1, param);

当我写下这样的东西时:

   @Test
    public void test() {        
        when(entityManager.createNamedQuery(queryName)).thenReturn(query);
        when(query.getResultList()).thenReturn(new ArrayList());
        //when(query.setParameter(1,project.getName())).thenCallRealMethod();
        projectDao.boo(name);

    }

查询和entityManager被模拟。 我有NPE,这并不奇怪,我不能调用该方法,因为查询是和接口。 那么有人可以告诉我在测试时在NamedQueries中设置参数的最佳方法吗?

1 个答案:

答案 0 :(得分:8)

你应该像这样创建一个Query接口的模拟......

@Test
public void test() { 

    Query query = mock(Query.class);

    when(entityManager.createNamedQuery(queryName)).thenReturn(query);

    ...

也许你忘记了字符串文字“queryName”周围的双引号。从您的代码中我看不到上面最后一行定义变量queryName的位置。