【发布时间】:2018-02-23 13:58:17
【问题描述】:
我是单元测试的新手,有一些模拟 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.AnnotationEnabler@5c87bfe2 上调用 beforeTestMethod 方法失败。
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)
【问题讨论】:
-
你试过谷歌吗?我不是故意粗鲁的。但。有大量的热门歌曲都写着你的名字。
-
我已经尝试过了,得到了运行时异常。我已经编辑了我的问题。请看一看。
标签: java junit dao powermock easymock