DBUnit, Hibernate/JPA, DAO и флеш

Цель

Чтобы протестировать метод создания 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 ()?

2
nl ja de

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);

Все работает отлично ...

Я не понимаю, почему, поэтому дайте мне знать в комментариях, если у вас есть ключ, чтобы помочь мне понять это.

1
добавлено
Spring Framework and more
Spring Framework and more
839 участник(ов)

чат о spring framework и связанных с ним технологиях. We're discussing: job, tech questions, beer meet up/networking: tech review ,LinkedIn skills, SOF q/a raise up& etc. languages: russian,java,eng.