Предотвращение повторной инициализации bean-компонента Spring для каждого теста JUnit - PullRequest
0 голосов
/ 27 июня 2018

У меня есть интеграционные тесты, основанные на JUnit, которые обращаются к БД. Мы также используем Liquibase Spring bean для инициализации базы данных.

Если я пытаюсь запустить несколько тестов параллельно, каждый из них пытается инициализировать БД с помощью Liquibase, вызывая блокировки и, в конечном итоге, сбои, поскольку только один экземпляр Liquibase может изменять БД одновременно.

Тесты настроены следующим образом:

@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
@WebAppConfiguration
@Sql({"/schema/insert-test-data.sql"})

Как настроить инициализацию БД (схему и данные), чтобы она выполнялась только один раз, а не для каждого теста?

1 Ответ

0 голосов
/ 28 июня 2018

Это просто идея, а не тест, но если вы не выполняете сценарии параллельно, как насчет использования ScriptUtils или ResourceDatabasePopulator iside @Before метод с некоторым переключателем.

@Before
public void init(){
    if (wasInitialized)
        return;

    new ResourceDatabasePopulator(new ClassPathResource("path/to/sql.sql")).execute(dataSource);
    wasInitialized = true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...