一尘不染

覆盖Junit Test中的默认Spring-Boot application.properties设置

spring-boot

我有一个Spring-Boot应用程序,其中默认属性是application.properties在类路径(src / main / resources
/ application.properties)中的文件中设置的。

我想用test.properties文件(src / test / resources /
test.properties)中声明的属性覆盖JUnit测试中的一些默认设置。

我通常为Junit测试提供专用的Config类,例如

package foo.bar.test;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
@Import(CoreConfig.class)
@EnableAutoConfiguration
public class TestConfig {

}

我首先认为@PropertySource("classpath:test.properties")在TestConfig类中使用将可以解决问题,但是这些属性不会覆盖application.properties设置(请参阅Spring-
Boot参考文档-23-外部化配置)。

然后我尝试-Dspring.config.location=classpath:test.properties在调用测试时使用。那很成功-
但我不想为每次测试执行都设置此系统属性。因此我将其放入代码中

@Configuration
@Import(CoreConfig.class)
@EnableAutoConfiguration
public class TestConfig {

  static {
    System.setProperty("spring.config.location", "classpath:test.properties");
  }

}

不幸的是再次失败了。

关于如何application.properties使用test.properties我必须忽略的JUnit测试中的设置,必须有一个简单的解决方案。


阅读 576

收藏
2020-05-30

共1个答案

一尘不染

您可以使用@TestPropertySource覆盖中的值application.properties。从其javadoc:

测试属性源可用于有选择地覆盖系统和应用程序属性源中定义的属性

例如:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = ExampleApplication.class)
@TestPropertySource(locations="classpath:test.properties")
public class ExampleApplicationTests {

}
2020-05-30