Я использую Spring Boot и пытаюсь написать интеграционный тест, в котором вызывается аннотированный метод: @Transactional(propagation = Propagation.REQUIRES_NEW)
.
Мой метод теста аннотирован:
@Test
@Transactional
@Sql(scripts = {
"/sql/insert_some_records.sql"
}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
Св этой конфигурации я получаю странное поведение, и при попытке отладки я обнаружил, что метод класса служебного компонента, который я пытаюсь протестировать, не может найти записи, которые я вставил с использованием сценария sql в @Sql
, т.е.myRepo.findAll()
внутри метода получает пустой список.
Мне удалось запустить тест после изменения параметра распространения для метода тестирования на:
@Transactional(propagation = Propagation.NEVER)
или:
@Transactional(propagation = Propagation.SUPPORTS)
И метод в классе обслуживания может правильно найти все записи из БД, но недостатком является то, что я должен вручную удалить этивставил записи скриптом после теста.
Я прочитал документацию Spring об опциях распространения и все еще в замешательстве.
Может кто-нибудь объяснить мне, в чем причина проблемы?И почему все работает после изменения варианта распространения?