2016-04-26 51 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();干净的插入后。没有区别:( –