Я использую Java 8, JUnit 4.12, Spring 4 и Hibernate 5.2.12. Наконец.Я хочу протестировать метод Hibernate, где я обновляю некоторые строки.Метод выглядит следующим образом:
final CriteriaBuilder qb = m_entityManager.getCriteriaBuilder();
final CriteriaUpdate<FailedEvent> q = qb.createCriteriaUpdate(FailedEvent.class);
final Root<FailedEvent> root = q.from(FailedEvent.class);
q.where(qb.and( qb.equal(root.get(FailedEvent_.objectId), objectId) ));
q.set(root.get(FailedEvent_.flaggedForDelete), true);
affectedRows = m_entityManager.createQuery(q).executeUpdate();
return affectedRows > 0;
У меня есть следующий тест JUnit для проверки этого
public class FailedEventDaoTest extends AbstractTransactionalJUnit4SpringContextTests
...
@Test
public final void testFlagForDeleteByObjectId()
{
final String eventId = "testId";
final FailedEvent event = failedEventDao.findByEventId(eventId);
Assert.assertFalse("A pre-condition fo this test is that an failed_event record with id \"" + eventId + "\" have a non-empty object id.", StringUtils.isEmpty(event.getObjectId()));
Assert.assertTrue(failedEventDao.flagForDeleteByObjectId(event.getObjectId()));
final FailedEvent foundEvent = failedEventDao.findByEventId(eventId);
Assert.assertTrue("Failed to mark flag for deletion.", foundEvent.getFlaggedForDelete());
} // testFlagForDeleteByObjectId
Но мой тест завершается неудачно в последней строке,
Assert.assertTrue("Failed to mark flag for deletion.", foundEvent.getFlaggedForDelete());
Это потому, что транзакция еще не завершена, и в базе данных ничего не обновлено?Как я могу проверить, что нужные записи обновлены?