我想为我的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中设置参数的最佳方法吗?
答案 0 :(得分:8)
你应该像这样创建一个Query接口的模拟......
@Test
public void test() {
Query query = mock(Query.class);
when(entityManager.createNamedQuery(queryName)).thenReturn(query);
...
也许你忘记了字符串文字“queryName”周围的双引号。从您的代码中我看不到上面最后一行定义变量queryName的位置。