【问题标题】:DBUnit, Hibernate/JPA, DAO and flushDBUnit、Hibernate/JPA、DAO 和刷新
【发布时间】:2012-12-28 09:22:02
【问题描述】:

目标

为了测试DAO的create方法,我创建了一个实例,将其插入数据库,刷新实体管理器以更新数据库,然后使用dbunit使用数据集比较表。


代码

这是代码,它使用 Spring 测试、DBUnit 和 JPA(通过 Hibernate):

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
    "/WEB-INF/applicationContext-database.xml"})
public class MyEntityTest extends AbstractTransactionalJUnit4SpringContextTests {

    @PersistenceContext
    protected EntityManager em;

    @Autowired
    MyEntityDAO myEntityDAO;

    @Test
    public void createTest() {
        // create the entity
        MyEntity record = new MyEntity();
        record.setData("test");    
        myEntityDAO.insertNew(record);

        // flush to update the database
        em.flush();         

        // get actual dataset from the connection
        Session session = em.unwrap(Session.class);
        Connection conn = SessionFactoryUtils.getDataSource(
            session.getSessionFactory()).getConnection();
        DatabaseConnection connection = new DatabaseConnection(conn);
        ITable actualTable = connection.createTable("MY_ENTITY");

        // get expected dataset
        IDataSet expectedDataSet = new FlatXmlDataSetBuilder().build(getClass().getResource("dataset.xml"));
        ITable expectedTable = expectedDataSet.getTable("MY_ENTITY");

        // compare the dataset
        Assertion.assertEquals(expectedTable, actualTable);
    }
}

问题

这段代码永远不会结束,它似乎在这个命令期间冻结(无限循环?):

ITable actualTable = connection.createTable("MY_ENTITY");

但如果我评论 em.flush() 块,测试结束(没有冻结或无限循环)。在这种情况下,测试失败,因为插入后数据库没有更新。


问题

如何在调用 dataset.getTable() 时使用类似的方法(将数据集与 dbunit 进行比较)测试 DAO 的创建方法而不冻结?

【问题讨论】:

    标签: spring hibernate jpa dbunit


    【解决方案1】:

    我找到了解决方案。问题是由连接引起的。

    如果我替换:

    Session session = em.unwrap(Session.class);
    Connection conn = SessionFactoryUtils.getDataSource(
            session.getSessionFactory()).getConnection();
    

    DataSource ds = (DataSource) applicationContext.getBean("dataSource");
    Connection conn = DataSourceUtils.getConnection(ds);
    

    一切正常...

    我不明白为什么,所以如果你有任何线索可以帮助我理解,请在 cmets 中告诉我。

    【讨论】:

      猜你喜欢
      • 2011-11-22
      • 1970-01-01
      • 2011-04-22
      • 2010-12-27
      • 1970-01-01
      • 2019-07-10
      • 2011-04-22
      • 1970-01-01
      • 2011-01-27
      相关资源
      最近更新 更多