我是使用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);
只是嘲笑我的回答
不是最好的技术,但我得到了我想要的。
感谢所有尝试的人!