在 @PostConstruct 中调用函数时无法 运行 单元测试
Unable to run Unit Test when call function in @PostConstruct
我在 EJB Project
上醒来,使用 JPA
到 query data
。现在,我创建 unit test
并使用 mockito
到 mock data
。有一个函数,我从 criteria builder
调用数据,它是从 @PostConstruct
调用的。所以如果结果为空,那么它会抛出 NoResultException
。但是,我无法通过 运行 单元测试来测试它。看看下面的源代码:
For class 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
谢谢您,如有任何意见,我们将不胜感激。
显然 NoResultException 嵌套在 EJBException 中,因此您的测试代码应该是:
@Test(expected = EJBException.class)
public void testExistingRefDataUpdate() throws NoResultException{
update.deleteRefDataUpdate();
refdataServiceBean.getLastUpdate();
}
我在 EJB Project
上醒来,使用 JPA
到 query data
。现在,我创建 unit test
并使用 mockito
到 mock data
。有一个函数,我从 criteria builder
调用数据,它是从 @PostConstruct
调用的。所以如果结果为空,那么它会抛出 NoResultException
。但是,我无法通过 运行 单元测试来测试它。看看下面的源代码:
For class 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
谢谢您,如有任何意见,我们将不胜感激。
显然 NoResultException 嵌套在 EJBException 中,因此您的测试代码应该是:
@Test(expected = EJBException.class)
public void testExistingRefDataUpdate() throws NoResultException{
update.deleteRefDataUpdate();
refdataServiceBean.getLastUpdate();
}