我正在EJB Project
上使用JPA
到query data
。现在,我创建unit test
并使用mockito
到mock data
。我从criteria builder
调用了一个函数,并从@PostConstruct
调用了该函数。因此,如果结果为空,那么它将抛出NoResultException
。但是,我无法运行单元测试来测试它。看看下面的源代码:
对于课程 RefdataUpdateDaoImpl
public class RefdataUpdateDaoImpl{
public RefdataUpdate getSingleUpdate() {
CriteriaBuilder cb = getCriteriaBuilder();
CriteriaQuery<RefdataUpdate> query = cb.createQuery(RefdataUpdate.class);
Root<RefdataUpdate> rootEntry = query.from(RefdataUpdate.class);
CriteriaQuery<RefdataUpdate> all = query.select(rootEntry);
TypedQuery<RefdataUpdate> allQuery = getEntityManager().createQuery(all);
return allQuery.getSingleResult();
}
}
在RefDataCacheBean
@PostConstruct
private void postConstruct() throws Exception{
cachedUpdateTs = RefdataUpdateDaoImpl.getLastUpdate();
}
这是单元测试
@Test(expected = NoResultException.class)
public void testExistingRefDataUpdate() throws NoResultException{
update.deleteRefDataUpdate();
refdataServiceBean.getLastUpdate();
}
因此,在单元测试中,它会从dataset xml
加载数据。因此,当我运行测试时,它会抛出NoResultException
并测试传递,但测试失败并且控制台记录没有找到实体数据。
在这种情况下,当从@PostConstruct
调用函数时,请帮助创建单元测试。
跟踪日志:
javax.ejb.EJBException: javax.persistence.NoResultException: No entity found for query
谢谢,任何意见将不胜感激。
答案 0 :(得分:0)
显然NoResultException嵌套在EJBException中,所以你的测试代码应该是:
@Test(expected = EJBException.class)
public void testExistingRefDataUpdate() throws NoResultException{
update.deleteRefDataUpdate();
refdataServiceBean.getLastUpdate();
}