есть интеграционные тесты с обновлением данных в h2 - хочу вместо @sql с удалением данных после каждого теста использовать @Transactional на тестовом классе.
По старой схеме и в реале обновляется правильно, но с аннотацией на паре тестов дважды обновляются данные, из-за чего они проваливаются.
Есть ли какой способ это исправить, кроме как сделать неисправные тесты без транзакции?
Спасибо
что значит дважды обновляется ?
из-за requires new чаще всего проблемы
requires new не откатываются
В одном из тестов вместо одной записи в бд их появляется две
ну, у меня такое было от предыдущих тестов. Выполняется Transactional тест, который вызывает requires new. Откатывается внешняя транзакция, но requires new не октатывается и так база делается грязной
Либо есть что-то вроде @BeforeEach @BeforeAll или как-то так
можете посмотреть в момент начала выполнения тестового метода есть ли там что-то в базе, только поменяйте isolation level до - read uncommited
Сейчас стоит дефолтная @Transactional, там вроде propagation required, но даже если выставить вручную или заменить к примеру на nested - та же ошибка. Before методов нет. Isolation level как раз сейчас и есть read uncommited (был еще serialazible тоже) - не помогло
так во внутренних вызовах может быть Requires new
я не об этом, посмотрите через тулзу для просмотра базы есть ли там что-то в начале выполнения тестового метода, может там уже что-то есть в базе, записанное другим тестом
В базе есть данные, но они не связаны с этим тестом. Проблема в том, что тест создает новые данные и на основе них (в случае если есть аннотация) , дважды вызывается сохранение. Не знаю, почему так, может setX() и saveX() при транзакции одинаково обновляют...
тогда без кода не разобраться
а если вообще ниразу не сохранять ?
Обсуждают сегодня