2013-01-15 64 views
3

我正在使用Spring 3移植到Hibernate 4,這意味着我不能再使用Spring的HibernateTemplate。重構代碼很簡單(使用會話的sessionFactory.getCurrentSession()替換回調函數),但是我遇到了單元測試的問題。特別是,我想爲我的DAO完全實現集成測試 - 不需要@Transactional用法。在測試中從@HibernateTemplate移動到SessionFactory而沒有@Transactional

但是,因爲HibernateTemplate不再提供打開會話的方式(如果某個未打開的話),我會得到「沒有找到當前線程的會話」。當我運行我的測試時,因爲sessionFactory.getCurrentSession()不打開一個會話,如果沒有打開。

有沒有什麼辦法可以解決這個問題,以複製HibernateTemplate給我的東西,而不必在我的測試中使用@Transactional?它似乎應該是可能的,但我只能使用@Transactional註釋測試類時才能使測試工作(因爲它會打開一個會話)。

+0

你有什麼不喜歡開始交易的原因嗎? –

+0

它增加了額外的開銷,對於這些測試,是沒有必要的。我不覺得在這種特殊情況下開銷會增加任何價值,所以這就是爲什麼我需要解決問題的原因。 – AHungerArtist

回答

-2

如果您使用Junit測試,它非常簡單。

在您的測試類,你必須加載Spring上下文:

@BeforeClass 
public static void createApplicationContext(){  
    try {   
     applicationContext = new ClassPathXmlApplicationContext(
       new String[] {"applicationContext.xml"});   
     yourDao = (YourDao)applicationContext.getBean("YourDao");   
    } catch (Exception e) { 
     Assert.assertNull(e); 
    } 
} 

然後你可以使用yourDao和編寫測試邏輯。

+0

這與Hibernate會話有什麼關係? –

+0

我通過Spring上下文配置事務管理器: '<豆ID = 「transactionManager的」 類= 「org.springframework.orm.hibernate4.HibernateTransactionManager」> <屬性名= 「SessionFactory的」 REF = 「的sessionFactory」/> '。我在DAO的方法上使用註解'@ Tansaction'。然後在這種模式下將DAO加載到測試類中。 –

相關問題