2015-04-16 45 views
1

我試圖測試使用Spring和DBUnit的(http://springtestdbunit.github.io/DBUnit的問題與Hibernate statelessSession

一旦單元測試裏面我的代碼:

sessionFactory.getCurrentSession().createCriteria(MyEntity.class).list() 

將返回DBUnit的插入實體的名單,所以它確實在數據庫(MYSQL)中插入了記錄。

但是:

sessionFactory.openStatelessSession().createCriteria(MyEntity.class).scroll(FORWARD_ONLY).next() 

將返回false!它無法使用無狀態會話找到任何記錄。

之前,我使用Liquibase插入相同的記錄,並且這段代碼完美地工作。

使用HSQL它甚至更糟,它當試圖打開無狀態會話...完全凍結(上滾動()指令...)

謝謝您的幫助!

回答

0

好!所以實際上什麼都沒有做用DbUnit,有點...

這段代碼簡單說明了同樣的問題,並沒有涉及DBUnit的:

MyEntity myEntity = new MyEntity(); 
    sessionFactory.getCurrentSession().save(myEntity); 
    assertEquals(1, sessionFactory.getCurrentSession().createCriteria(MyEntity .class).list() 
      .size()); 
    assertTrue(sessionFactory.openStatelessSession().createCriteria(MyEntity .class) 
      .scroll(ScrollMode.FORWARD_ONLY).next()); 

首先斷言是好的,第二個失敗。 所以我想這是一個簡單的冬眠問題,我也猜想liquibase正在做某件事來防止它......可能是一個交易問題?

0

SO!這似乎是在最後一個交易問題,因爲一個簡單的

sessionFactory.getCurrentSession().getTransaction().commit(); 

使測試走向綠色!

現在的問題是,如何讓DBUnit的承諾,我想交易...

在測試開始時,DBUnit的初始化之後,我跑:

sessionFactory.getCurrentSession().getTransaction().wasCommitted() 

它返回false。這認爲問題來自那裏。