Gradle测试任务,如何设置Spring Boot环境进行测试?
Posted
技术标签:
【中文标题】Gradle测试任务,如何设置Spring Boot环境进行测试?【英文标题】:Gradle test task, how to set the Spring Boot environment for testing? 【发布时间】:2017-05-20 03:05:36 【问题描述】:我有一个使用 Gradle 的 Spring Boot 项目设置。我有一个application.yml
文件,其中描述了用于名为“dev”和“prod”的两个环境的设置。
我能够在调用 Gradle bootRun 任务时将默认环境设置为“dev”,使用 build.gradle
中的以下代码:
def profile = 'dev'
bootRun
args = ["--spring.profiles.active=" + profile]
但是如果我将相同的代码添加到测试任务中,它就不起作用了:
def profile = 'dev'
test
args = ["--spring.profiles.active=" + profile]
testLogging
showStandardStreams = true
堆栈跟踪:
FAILURE: Build failed with an exception.
* Where:
Build file 'C:\Users\Blade\javaworkspace\AutomationStatisticsPortal\build.gradle' line: 43
* What went wrong:
A problem occurred evaluating root project 'AutomationStatisticsPortal'.
> Could not set unknown property 'args' for task ':test' of type org.gradle.api.tasks.testing.Test.
如果没有该代码,测试任务将从“prod”获取配置,这是错误的。
我希望 bootRun 使用“dev”,因为这就是我启动应用程序进行手动测试的方式。但我不确定如何确保它也将“dev”用于测试任务,然后确保 Tomcat 只使用“prod”。
如果我不覆盖它,我是否可以假设 tomcat 会选择“prod”配置,因为这似乎是默认行为?
请指教。
【问题讨论】:
【参考方案1】:试试这个
test
systemProperties['spring.profiles.active'] = 'dev'
【讨论】:
没什么区别。我可以使它使用正确的属性的唯一方法是更改 yaml 文件。该属性对于 dev 和 prod 具有相同的名称。如果我将其重命名为 prod,那么它将选择开发者。但如果它具有相同的名称,则不会。我需要保持名称不变。 我设法通过更改 yaml 文档的顺序来修复它。我先是“开发”,然后是“---”,然后是“产品”文档。我只是交换了它们,它似乎解决了我的问题。真奇怪。以上是关于Gradle测试任务,如何设置Spring Boot环境进行测试?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 gradle 任务使用 spring 配置文件运行 bootRun
带有 Gradle 的 Spring Boot 任务失败:测试?
如何在分叉进程上使用 gradle 任务启动 Spring Boot 应用程序?
如何让我的 gradle 测试任务为不在 maven Central 上的库使用 python pip install?