如何设置运行测试的默认Spring Boot配置文件(不使用环境变量)



我有一个Spring Boot项目,使用gradle,有三个Spring配置文件:

  • "开发"(用于开发时)
  • "测试"(用于运行测试时)
  • "production"(用于在生产中部署时[到heroku])

因此,我有四个应用程序*.yml文件:

  • application.yml(包含所有共享默认值)
  • 应用程序开发.yml
  • application-test.yml
  • 应用程序生产yml

这些环境都可以正常工作。问题是,当我将代码部署到heroku时,heroku运行"gradlebuild"(依次运行"gradlestest"),而heroku没有设置环境变量的选项。因此,我无法设置活动配置文件。因此,当它运行测试时,它使用的是application.yml,而没有application-test.yml中的重写。因此,测试显然失败了。

到目前为止,我唯一的解决方案是将所有application-test.yml默认值放入application.yml中,然后在其他配置文件中再次覆盖它们,但这显然远非理想。

有没有办法:

  • 从gradle中设置活动的Spring配置文件(注意,我没有编辑访问"测试"或"构建"任务的权限,因为它们来自"Spring-boot-gradle-plugin")
  • 或者在Spring Boot中有没有一种方法可以在运行测试时设置默认的活动Spring配置文件

认为乔希斯特的答案是正确的。

无论如何,我想你也可以设置SPRING_PROFILES_ACTIVE环境变量,如下所示:

$ heroku config:set SPRING_PROFILES_ACTIVE=test
Adding config vars and restarting myapp... done, v12
SPRING_PROFILES_ACTIVE: test
$ heroku config
SPRING_PROFILES_ACTIVE: test
$ heroku config:get SPRING_PROFILES_ACTIVE
test
$ heroku config:unset SPRING_PROFILES_ACTIVE
Unsetting SPRING_PROFILES_ACTIVE and restarting myapp... done, v13

如果使用@WebIntegrationTest@IntegrationTest,则可以使用注释将配置文件设置为属性值。

看起来像这样:

@RunWith(SpringJUnit4ClassRunner.class)
@WebIntegrationTest({"spring.profiles.active=test"})
public class MyWebIntegrationTests {
// ...
} 

最新更新