事务Spring测试中DBUnit更改不可见

时间:2016-04-26 11:37:16

标签: spring spring-transactions transactional dbunit

我尝试在Spring Transactional Test中使用DBUnit填充数据库表。 数据源是TransactionAwareDataSourceProxy。所以我想把这个源提供给DBUnit并且填充表应该对于之后的jdbcTemplate查询是可见的吗?

@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。 我错过了什么?

2 个答案:

答案 0 :(得分:0)

我已经看到当dbUnit和生产应用程序共享相同的事务/数据源时会发生这种情况。什么“修复”它是“刷新”,通过在测试中手动调用刷新或使用单独的事务或数据库连接(因此dbUnit的更改刷新)。

答案 1 :(得分:0)

有点解决方案.... 我将DBUnit版本从2.4.9更改为2.5.2现在一切正常。