小编典典

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

java

我有一个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测试中的设置,必须有一个简单的解决方案。


阅读 216

收藏
2020-09-08

共1个答案

小编典典

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

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

例如:

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

}
2020-09-08