如何使用PowerMock+;EasyMock+;Junit+;JAVA

如何使用PowerMock+;EasyMock+;Junit+;JAVA,java,junit,dao,powermock,easymock,Java,Junit,Dao,Powermock,Easymock,我是单元测试新手,对模拟DAO层有一些要求,但不知道如何做。 下面是我的示例DAO代码,它正在执行一些事务性活动 Class DAOList{ public Object getRows(Map mapObj, Object error) { Session session = HibernateSessionManager.getSessionFactory().openSession(); try { Query query = session.creat

我是单元测试新手,对模拟DAO层有一些要求,但不知道如何做。 下面是我的示例DAO代码,它正在执行一些事务性活动

 Class DAOList{
 public Object getRows(Map mapObj, Object error) {
    Session session = HibernateSessionManager.getSessionFactory().openSession();
    try {
        Query query = session.createSQLQuery("select * from some_table ").addEntity(SomeObject.class);
        Object getObj = query.uniqueResult();
        return getObj;
    }

    catch (HibernateException exc) {
        exc.printStackTrace();
        logger.error("Exception occurred: " + exc.getMessage());
    }

    finally {
        session.close();
    }
    return null;
}   }
我试着像下面这样编写测试用例,但遇到运行时异常

    @TestSubject 
    Session sessionn;

    @Mock 
    Transaction transaction;

    @MockSession 
    session;

    @MockSQLQuery
    mockQuery;

    @Test
public void testSomeSuccessCheck() throws Exception {
    HashMap map = new HashMap();

    EasyMock.expect(HibernateSessionManager.getSessionFactory().openSession()).andReturn(sessionn);
    EasyMock.expect(session.beginTransaction()).andReturn(transactionn);
    EasyMock.expect(session.createSQLQuery(EasyMock.anyString()).addEntity(VehicleDetails.class)).andReturn(query);
    EasyMock.expect((SomeObject) query.uniqueResult()).andReturn(someObj);

    SomeObject respObj = vehDao.someMethod(map, errs);
    assertNotNull(respObj);
}
我得到的完整错误跟踪:

java.lang.RuntimeException:调用PowerMock测试侦听器org.PowerMock.api.extension.listener上的beforeTestMethod方法。AnnotationEnabler@5c87bfe2失败了

Caused by: java.lang.NullPointerException: Have you forgotten to instantiate connection?
at org.easymock.internal.Injector.injectMocks(Injector.java:81)
at org.easymock.EasyMockSupport.injectMocks(EasyMockSupport.java:528)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.powermock.reflect.internal.WhiteboxImpl.performMethodInvocation(WhiteboxImpl.java:1846)
at org.powermock.reflect.internal.WhiteboxImpl.doInvokeMethod(WhiteboxImpl.java:810)
at org.powermock.reflect.internal.WhiteboxImpl.invokeMethod(WhiteboxImpl.java:790)
at org.powermock.reflect.Whitebox.invokeMethod(Whitebox.java:466)
at org.powermock.api.extension.listener.AnnotationEnabler.beforeTestMethod(AnnotationEnabler.java:73)
at org.powermock.tests.utils.impl.PowerMockTestNotifierImpl.notifyBeforeTestMethod(PowerMockTestNotifierImpl.java:82)

首先需要模拟静态方法调用HibernateSessionManager.getSessionFactory(),然后模拟openSession方法调用。其余部分将保留为您添加的内容

有关如何使用PowerMock的更多信息,请参阅:


您还可以使用Mockito+Powermock来解决相同的问题

你试过谷歌吗?我不想给人留下粗鲁的印象。但是有很多关于你名字的点击。我已经尝试过了,并且出现了运行时异常。我已经编辑了我的问题。请看一看。