Load different application.yml in SpringBoot Test

前端 未结 11 1153
天涯浪人
天涯浪人 2020-11-30 22:09

I\'m using a spring boot app which runs my src/main/resources/config/application.yml.

When I run my test case by :

@RunWith(SpringJUnit4ClassRunner.c         


        
11条回答
  •  刺人心
    刺人心 (楼主)
    2020-11-30 22:47

    This might be considered one of the options. now if you wanted to load a yml file ( which did not get loaded by default on applying the above annotations) the trick is to use

    @ContextConfiguration(classes= {...}, initializers={ConfigFileApplicationContextInitializer.class})
    

    Here is a sample code

    @RunWith(SpringRunner.class)
    @ActiveProfiles("test")
    @DirtiesContext
    @ContextConfiguration(classes= {DataSourceTestConfig.class}, initializers = {ConfigFileApplicationContextInitializer.class})
    public class CustomDateDeserializerTest {
    
    
        private ObjectMapper objMapper;
    
        @Before
        public void setUp() {
            objMapper = new ObjectMapper();
    
        }
    
        @Test
        public void test_dateDeserialization() {
    
        }
    }
    

    Again make sure that the setup config java file - here DataSourceTestConfig.java contains the following property values.

    @Configuration
    @ActiveProfiles("test")
    @TestPropertySource(properties = { "spring.config.location=classpath:application-test.yml" })
    public class DataSourceTestConfig implements EnvironmentAware {
    
        private Environment env;
    
        @Bean
        @Profile("test")
        public DataSource testDs() {
           HikariDataSource ds = new HikariDataSource();
    
            boolean isAutoCommitEnabled = env.getProperty("spring.datasource.hikari.auto-commit") != null ? Boolean.parseBoolean(env.getProperty("spring.datasource.hikari.auto-commit")):false;
            ds.setAutoCommit(isAutoCommitEnabled);
            // Connection test query is for legacy connections
            //ds.setConnectionInitSql(env.getProperty("spring.datasource.hikari.connection-test-query"));
            ds.setPoolName(env.getProperty("spring.datasource.hikari.pool-name"));
            ds.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
            long timeout = env.getProperty("spring.datasource.hikari.idleTimeout") != null ? Long.parseLong(env.getProperty("spring.datasource.hikari.idleTimeout")): 40000;
            ds.setIdleTimeout(timeout);
            long maxLifeTime = env.getProperty("spring.datasource.hikari.maxLifetime") != null ? Long.parseLong(env.getProperty("spring.datasource.hikari.maxLifetime")): 1800000 ;
            ds.setMaxLifetime(maxLifeTime);
            ds.setJdbcUrl(env.getProperty("spring.datasource.url"));
            ds.setPoolName(env.getProperty("spring.datasource.hikari.pool-name"));
            ds.setUsername(env.getProperty("spring.datasource.username"));
            ds.setPassword(env.getProperty("spring.datasource.password"));
            int poolSize = env.getProperty("spring.datasource.hikari.maximum-pool-size") != null ? Integer.parseInt(env.getProperty("spring.datasource.hikari.maximum-pool-size")): 10;
            ds.setMaximumPoolSize(poolSize);
    
            return ds;
        }
    
        @Bean
        @Profile("test")
        public JdbcTemplate testJdbctemplate() {
            return new JdbcTemplate(testDs());
        }
    
        @Bean
        @Profile("test")
        public NamedParameterJdbcTemplate testNamedTemplate() {
            return new NamedParameterJdbcTemplate(testDs());
        }
    
        @Override
        public void setEnvironment(Environment environment) {
            // TODO Auto-generated method stub
            this.env = environment;
        }
    }
    

提交回复
热议问题