2015-04-16 3 views
1

Я пытаюсь проверить мой код, используя Spring и DBUnit (http://springtestdbunit.github.io/)DBUnit проблема с спящим statelessSession

После того, как внутри модульного тестирования:

sessionFactory.getCurrentSession().createCriteria(MyEntity.class).list() 

будет возвращать список лиц, вставленных DBUnit, поэтому он вставлял записи в базу данных (MYSQL).

Но:

sessionFactory.openStatelessSession().createCriteria(MyEntity.class).scroll(FORWARD_ONLY).next() 

вернет ложь! Он не может найти записи, используя сеанс без состояния.

Прежде, я использую, чтобы вставить те же записи с помощью Liquibase, и этот фрагмент кода работал отлично.

Использование HSQL это еще хуже, она полностью зависает при попытке открыть сессионные ... (на свитке() инструкции ...)

Спасибо за вашу помощь!

ответ

0

OK! Так что это на самом деле не имеют ничего общего с DBUnit, вроде ...

Этот код просто показывает тот же вопрос, и ни DBUnit не включают:

MyEntity myEntity = new MyEntity(); 
    sessionFactory.getCurrentSession().save(myEntity); 
    assertEquals(1, sessionFactory.getCurrentSession().createCriteria(MyEntity .class).list() 
      .size()); 
    assertTrue(sessionFactory.openStatelessSession().createCriteria(MyEntity .class) 
      .scroll(ScrollMode.FORWARD_ONLY).next()); 

Во-первых, утверждают в порядке, второй выходит из строя. Итак, я думаю, что это простая проблема спящего режима, и я также предполагаю, что Liquibase делает что-то, чтобы каким-то образом предотвратить это ... Возможно, проблема с транзакцией?

0

SO! В конце концов, похоже, проблема с транзакцией как простой

sessionFactory.getCurrentSession().getTransaction().commit(); 

сделать тест зеленым!

Вопрос в том, как сделать DBUnit совершить сделку, я полагаю ...

В начале теста, после инициализации DBUnit, я бегу:

sessionFactory.getCurrentSession().getTransaction().wasCommitted() 

И это возвращает ложь. Это говорит о том, что проблема исходит оттуда.

Смежные вопросы