2010-10-08 28 views
1

我得到一個LazyInitializationException,試圖使用標題中定義的工具堆棧來測試我的DAO方法。我的理解是,我的測試必須在hibernate會話之外運行,或者在我嘗試從我的DAO讀取子對象之前已關閉。通過閱讀文檔,我明白使用@TransactionConfiguration標籤可以讓我定義運行測試的事務管理器。junit 4在Eclipse中使用Spring 3.0和Hibernate 3進行測試 - LazyInitializationException

我已經多次閱讀文檔和zillion論壇帖子。我的頭仍然在我的鍵盤上...我錯過了什麼?謝謝你的幫助!

我的單元測試類:

@RunWith(SpringJUnit4ClassRunner.class) 
    @ContextConfiguration(locations = { 
     "classpath:/WEB-INF/applicationContext-db.xml", 
     "classpath:/WEB-INF/applicationContext-hibernate.xml", 
     "classpath:/WEB-INF/applicationContext.xml" }) 
    @TestExecutionListeners({DependencyInjectionTestExecutionListener.class, CleanInsertTestExecutionListener.class}) 
    @DataSetLocation("test/java/com/yada/yada/dao/dbunit-general.xml") 
    @TransactionConfiguration(transactionManager="transactionManager", defaultRollback = true) 
    @Transactional 
    public class RealmDAOJU4Test { 

    @Autowired 
    private DbUnitInitializer dbUnitInitializer; 

    @Autowired 
    private RealmDAO realmDAO; 

    @Test 
    public void testGetById() { 
     Integer id = 2204; 
     Realm realm = realmDAO.get(id); 
     assertEquals(realm.getName().compareToIgnoreCase(
     "South Technical Realm"), 0); 
     assertEquals(8, realm.getRealmRelationships().size()); 
    } 
} 

我的applicationContext-hibernate.xml:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource"></property> 
    <property name="useTransactionAwareDataSource" value="true" /> 
    ... other properties removed ... 
</bean> 

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
    <property name="sessionFactory"> 
    <ref bean="sessionFactory" /> 
    </property> 
</bean> 

在applicationContext.xml中吾道定義

<bean id="realmDAOTarget" class="com.yada.yada.dao.hibernate.RealmDAOImpl"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 
<bean id="realmDAO" class="org.springframework.aop.framework.ProxyFactoryBean"> 
    <property name="proxyInterfaces"> 
    <value>com.yada.yada.dao.RealmDAO</value> 
    </property> 
    <property name="interceptorNames"> 
    <list> 
    <value>hibernateInterceptor</value> 
    <value>realmDAOTarget</value> 
    </list> 
    </property> 
</bean> 

回答

2

好,對任何人沿着以下在家裏,我錯過了:

TransactionalTestExecutionListener

@Transactional註釋的@TestExecutionListeners列表中需要@Transactional註釋才能起作用。

+0

謝謝,剛剛googling關於SessionFactories並找到了主題。 – 2012-07-20 19:10:54

+0

這工作很好,只花了我一個晚上去這個職位,謝謝! – credmp 2012-12-08 22:58:38

相關問題