Можно загрузить конкретные data.sql для каждой аннотации SpringbootTest - PullRequest
0 голосов
/ 19 июня 2019

У меня есть несколько @SpringBootTest тестов с расширенной базой данных (h2) с data.sql с данными для тестов.Каждый тест имеет свой собственный домен, и data.sql становится все больше.Я хотел бы знать, есть ли какая-либо опция для включения определенного data.sql для каждой аннотации @SpringBootTest, например, de properties source.

Я знаю, что есть опция, которая создает разные application.propertiesи укажите там data.sql для загрузки, но я хотел бы знать, есть ли более чистые варианты.

В настоящее время у меня есть это:

@SpringBootTest(classes = {MyApplication.class}, webEnvironment = 
SpringBootTest.WebEnvironment.RANDOM_PORT)
@ExtendWith(SpringExtension.class)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class MyFunctionalTest {

И я хотел бы что-то вроде этого:

@SpringBootTest(classes = {MyApplication.class}, webEnvironment = 
SpringBootTest.WebEnvironment.RANDOM_PORT)
@ExtendWith(SpringExtension.class)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@H2Data("sepecific.sql)
public class MyFunctionalTest {

1 Ответ

0 голосов
/ 19 июня 2019

Привет, на мой взгляд, возможно, я сделал это для обычного весеннего загрузочного приложения, я не пробовал его для теста, но я почти уверен, что он будет работать для теста.Вам нужно объявить несколько DataSourceInitializers, как я делал в этом посте:

@Bean
        public DataSourceInitializer dataSourceInitializer1(@Qualifier("datasource1") DataSource datasource) {
            ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator();
            resourceDatabasePopulator.addScript(new ClassPathResource("schema-h22.sql"));
            resourceDatabasePopulator.addScript(new ClassPathResource("data-h22.sql"));

                DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();
                dataSourceInitializer.setDataSource(datasource);
                dataSourceInitializer.setDatabasePopulator(resourceDatabasePopulator);
                return dataSourceInitializer;
        }

    @Bean
    public DataSourceInitializer dataSourceInitializer2(@Qualifier("datasource2") DataSource datasource) {
        ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator();
        resourceDatabasePopulator.addScript(new ClassPathResource("schema-h21.sql"));
        resourceDatabasePopulator.addScript(new ClassPathResource("data-h21.sql"));

            DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();
            dataSourceInitializer.setDataSource(datasource);
            dataSourceInitializer.setDatabasePopulator(resourceDatabasePopulator);
            return dataSourceInitializer;
    }

Spring Boot 2 Несколько источников данных инициализируют схему

...