Цель
Чтобы протестировать метод создания DAO, я создаю экземпляр, вставляю его в базу данных, очищаю диспетчер сущностей, чтобы обновить базу данных, а затем используйте dbunit для сравнения таблицы с использованием набора данных.
Код
Here is the Код, it uses Spring test, DBUnit and JPA (via 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);
}
}
проблема
This Код never ends, it seems to freeze (infinite loop ?) during this command:
<Код>ITable actualTable = connection.createTable("MY_ENTITY");
But if I comment the <Код>em.flush() block, the test ends (no freeze or infinite loop). In this case, the test fails because the database has not been updated after the insert.
Вопрос
как я могу протестировать метод создания DAO с использованием аналогичного подхода (сравнить набор данных с dbunit) без замораживания при вызове dataset.getTable ()?