在 @PostConstruct 中调用函数时无法 运行 单元测试

Unable to run Unit Test when call function in @PostConstruct

我在 EJB Project 上醒来,使用 JPAquery data。现在,我创建 unit test 并使用 mockitomock 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();
}