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

新手上路,请多包涵

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

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

我通常有一个专门的配置类用于我的 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 Reference Doc - 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");
  }

}

不幸的是,这又没有成功。

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

原文由 FrVaBe 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

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

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

例如:

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

}

原文由 Andy Wilkinson 发布,翻译遵循 CC BY-SA 3.0 许可协议

Spring Boot 自动加载 src/test/resources/application.properties ,如果使用以下注释

@RunWith(SpringRunner.class)
@SpringBootTest

因此,将 test.properties 重命名为 application.properties 以利用自动配置。

如果您 需要加载属性文件(到环境中),您还可以使用以下内容,如此 所述

@RunWith(SpringRunner.class)
@ContextConfiguration(initializers = ConfigFileApplicationContextInitializer.class)

[ 更新:覆盖某些属性以进行测试]

  1. 添加 src/main/resources/application-test.properties
  2. @ActiveProfiles("test") 注释测试类。

这会将 application.properties 和 --- application-test.properties 属性加载到测试用例的应用程序上下文中,按照 此处 定义的规则。

演示 - https://github.com/mohnish82/so -spring-boot-testprops

原文由 Mohnish 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题