目标
为了测试 DAO 的创建方法,我创建了一个实例,将其插入数据库,刷新实体管理器以更新数据库,然后使用 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 的创建方法而不会冻结?