Тест интеграции Spring Boot для метода Service с аннотацией @Transactional (распространение = Propagation.REQUIRES_NEW) - PullRequest
0 голосов
/ 18 февраля 2019

Я использую 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 об опциях распространения и все еще в замешательстве.

Может кто-нибудь объяснить мне, в чем причина проблемы?И почему все работает после изменения варианта распространения?

...