2016-04-26 49 views
0

我嘗試在Spring Transactional Test中使用DBUnit填充數據庫表。 數據源是一個TransactionAwareDataSourceProxy。所以我會把這個源給DBUnit,而不是填充表應該是可見的後jdbcTemplate查詢?DBUnit更改在事務性彈簧測試中不可見

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {"many contexts"}) 
@TransactionConfiguration(transactionManager = "transactionManager") 
@Transactional 
public class DBTest { 

    @Autowired(required = true) 
    TransactionAwareDataSourceProxy dataSource; 

    private JdbcTemplate jdbcTemplate; 

    @Autowired(required = true) 
    public void setJdbcTemplate(TransactionAwareDataSourceProxy dataSource) { 
     this.jdbcTemplate = new JdbcTemplate(dataSource); 
    } 

    @Autowired(required = true) 
    SessionFactory sessionFactory; 

    @Test 
    @Transactional 
    public void test() throws Exception { 
     IDatabaseConnection dbConn = new DatabaseDataSourceConnection(dataSource); 
     DatabaseOperation.CLEAN_INSERT.execute(dbConn, new XmlDataSet(ClassLoader.getSystemResourceAsStream("TABLE.xml"))); 

     System.out.println("Es wurden gefunden : " + this.jdbcTemplate.queryForInt("select count(*) from TABLE")); 
     System.out.println("blaaa"); 

    } 

查詢總是返回0. 我在想什麼?

回答

0

種類的解決方案.... 我將DBUnit版本從2.4.9更改爲2.5.2現在一切工作正常。

+0

聽起來像一個很好的bug已修復!:-) – Jeff

0

我見過這種情況發生時,dbUnit和生產應用程序共享相同的交易/數據源。通過手動調用測試中的刷新或使用單獨的事務或數據庫連接(因此dbUnit的更改刷新),「修復」它是「刷新」。

+0

我試過sessionFactory.getCurrentSession()。flush();乾淨的插入後。沒有區別:( –