无法模拟实体管理器函数调用



我是使用PowerMock和EasyMock测试我的代码的单元。我有一种内部调用该方法的方法,该方法返回Entity Manager对象(由Spring初始化)。如何从Junit代码中嘲笑此功能?还有其他方法吗?目前,我编写了一个看起来像这样的代码

BaseJpaDaoImpl jpaDaoImplMock= EasyMock.createNiceMock(BaseJpaDaoImpl.class);
EasyMock.expect(jpaDaoImplMock.getEntityManager(true)).andReturn().anyTimes();
EasyMock.replay(jpaDaoImplMock);

basejpadaoimpl包含返回Entity Manager实例的方法。

protected EntityManager getEntityManager(boolean throwExceptionIfNotSet) {
    if(throwExceptionIfNotSet && entityManager == null) {
        logger.error("EM is NULL");
        throw new IllegalStateException("Deployment Issue, EM is Null!");
    }
    return entityManager;
}

看起来像这样

任何帮助将不胜感激非常感谢!

附加测试类

@RunWith(PowerMockRunner.class)
@PrepareForTest({RequestContextHelperUtil.class, BaseJpaDaoImpl.class,SearchAwareBaseJpaDaoImpl.class})
public class InventoryDaoJpaImplTest {
@Test
public void ABC() throws Exception {
    PowerMock.mockStatic(RequestContextHelperUtil.class);
    BaseJpaDaoImpl jpaDaoImplMock= EasyMock.createNiceMock(BaseJpaDaoImpl.class);
    EasyMock.expect(jpaDaoImplMock.getEntityManager(true)).andReturn(null).anyTimes();
    EasyMock.replay(jpaDaoImplMock);

最后,在经历了很多头之后,我意识到我错过了一个小点。这就是我所做的

EntityManager em = EasyMock.createNiceMock(EntityManager.class);
BaseJpaDaoImpl jpaDaoImplMock = EasyMock.createNiceMock(BaseJpaDaoImpl.class);
EasyMock.expect(jpaDaoImplMock.getEntityManager(true)).andReturn(em).anyTimes();
EasyMock.replay(em);
EasyMock.replay(jpaDaoImplMock);

只是嘲笑我的回答

不是最好的技术,但我得到了我想要的。

感谢所有尝试的人!

最新更新