【问题标题】:DBUnit changes not visible inside transactional Spring testDBUnit 更改在事务性 Spring 测试中不可见
【发布时间】:2016-04-26 11:37:15
【问题描述】:

我尝试在 Spring 事务测试中使用 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。 我错过了什么?

【问题讨论】:

    标签: spring spring-transactions transactional dbunit


    【解决方案1】:

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

    【讨论】:

    • 我试过 sessionFactory.getCurrentSession().flush();在干净的插入之后。没有区别:(
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-04-03
      • 1970-01-01
      • 2017-03-28
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多