春季启动测试:弹簧属性被忽略

Posted

技术标签:

【中文标题】春季启动测试:弹簧属性被忽略【英文标题】:Spring boot test: spring properties are ignored 【发布时间】:2021-08-24 10:19:35 【问题描述】:

我在运行 springboottest 时遇到了一个奇怪的问题。

我的属性文件位于src/test/resources/application.properties

由于某种原因,与 h2 db 相关的属性被忽略了。所有 spring 命名空间的属性都是灰色的(其他属性被正确读取)。

# h2
spring.test.database.replace=none
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.platform=h2
spring.datasource.username=
spring.datasource.password=
spring.datasource.url=jdbc:h2:file:C:/devenv/java/h2/database/perscel3_sumo_test;MODE=Oracle;AUTO_SERVER=TRUE;
spring.h2.console.enabled=true
spring.h2.console.path=/h2
spring.jpa.open-in-view=true
spring.jpa.hibernate.ddl-auto=create-drop

我的测试文件:

@Import(BatchTestConfig.class, DatabaseConfig.class)
@SpringBootTest(classes =  Perscel3SumoBackendTestApplication.class )
@RunWith(SpringJUnit4ClassRunner.class)
@EnableJpaRepositories("be.cm.apps.press.perscel3.repository")
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class BatchConfigurationTest 

    @Autowired
    @Qualifier("jobLauncherTestUtilsForOptIn")
    private JobLauncherTestUtils jobLauncherTestUtils;

    private JdbcTemplate jdbcTemplate;

    @Autowired
    @Qualifier("h2.testDataSource")
    public void setDataSource(DataSource dataSource) 
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    

    @Test
    public void testOptInJob() throws Exception 
        jdbcTemplate.update("delete from cm_members");
        for (int i = 1; i <= 10; i++) 
//          jdbcTemplate.update("insert into cm_members values (?, 0, ?, 100000)",
//                  i, "customer" + i);
        

        JobExecution jobExecution = jobLauncherTestUtils.launchJob();


        Assert.assertEquals("COMPLETED", jobExecution.getExitStatus().getExitCode());
    


在控制台中仍然存在以下消息:

 Starting embedded database: url='jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false', username='sa'

这不是我想要的。

虽然没有错误。我读的属性如下:

@SpringBootApplication(exclude = UserDetailsServiceAutoConfiguration.class)
@PropertySource(value = "classpath:application.properties")
public class Perscel3SumoBackendTestApplication 

    public static void main(String[] args) 
        TimeZone.setDefault(TimeZone.getTimeZone("Europe/Brussels"));
        SpringApplication.run(Perscel3SumoBackendTestApplication.class, args);
    


并且属性文件出现在target/test-classes

重点是在调试时访问数据库,所以我想要文件访问而不是内存。

【问题讨论】:

【参考方案1】:

哈哈,没关系...我用我忘记的自定义数据源 bean 覆盖了它。 虽然问题的根源和我写这个 bean 的原因是 IntelliJ 中的一个烦人的错误,它声称它无法找到数据源,尽管它显然存在。

【讨论】:

以上是关于春季启动测试:弹簧属性被忽略的主要内容,如果未能解决你的问题,请参考以下文章

在春季启动测试中使用wiremock随机端口设置属性

jar弹簧启动属性文件

春季启动的 logging.config 配置

Spring Boot 测试容器

Spring MVC集成测试弹簧安全问题,怎么解决

春季启动测试:为每个测试加载上下文?