Ole*_*ndr 3 java junit jpa named-query mockito
我想为我的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;
}
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是:
query.setParameter(1, param);
Run Code Online (Sandbox Code Playgroud)
当我写下这样的东西:
@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);
}
Run Code Online (Sandbox Code Playgroud)
查询和entityManager被模拟.我有NPE,这并不奇怪,我不能调用该方法,因为查询是和接口.那么有人可以告诉我在测试时在NamedQueries中设置参数的最佳方法吗?
你应该像这样创建一个Query接口的模拟器......
@Test
public void test() {
Query query = mock(Query.class);
when(entityManager.createNamedQuery(queryName)).thenReturn(query);
...
Run Code Online (Sandbox Code Playgroud)
也许你忘记了字符串文字"queryName"周围的双引号.从您的代码中我看不到上面最后一行定义变量queryName的位置.