Я новичок в весне и делаю некоторые интеграционные тесты. Использование данных Hibernate, MySql и Spring JPA. Я использую поддержку транзакций, и в конце каждого теста все откатывается.
Например:
@Test (expected=DataIntegrityViolationException.class)
public void findAndDelete() {
UUID uuid = UUID.fromString(TESTID);
User user= iUserService.findOne(uuid);
iUserService.delete(cashBox);
iUserService.flush();
assertNull(iUserService.findOne(uuid));
}
В приведенном выше коде я вызываю iUserService.flush(), так что sql отправляется в БД, и возникает ожидаемое исключение DataIntegrityViolationException, потому что есть внешний ключ от пользователя к другой таблице (каскад не разрешен, нет). Пока все хорошо.
Теперь, если я удалю iUserService.flush(), ожидаемое исключение не произойдет, потому что sql не будет отправлен в БД.
Я попытался добавить flush() в метод @After разборки, но это не сработало, поскольку тест не видит исключение вне тестового метода.
Есть ли способ избежать вызова флеша в методах тестирования?
Было бы предпочтительнее, если бы разработчикам в моей команде вообще не приходилось использовать метод сброса в своем тестовом коде.
Изменить: я попытался добавить следующее
@Before
public void before() {
Session session = entityManagerFactory.createEntityManager().unwrap(Session.class);
session.setFlushMode(FlushMode.ALWAYS);
}
но, похоже, он очищает sqls перед каждым запросом.