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

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

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

我通常有一个专门的配置类为我的Junit测试,例如。

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 {

}

我首先认为在TestConfig类中使用@PropertySource(“classpath:test.properties”)会做到这一点,但这些属性不会覆盖application.properties设置(参见Spring-Boot参考文档 – 23. Externalized Configuration)。

然后我试图在调用测试时使用-Dspring.config.location = classpath:test.properties。这是成功的 – 但我不想为每个测试执行设置此系统属性。因此我把它放在代码中

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

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

}

不幸的是再次不成功。

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

最佳答案
您可以使用@TestPropertySource覆盖application.properties中的值。从它的javadoc:

test property sources can be used to selectively override properties defined in system and application property sources

例如:

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

}

转载注明原文:java – 覆盖Junit Test中的默认Spring-Boot application.properties设置 - 代码日志