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?

Gradle - jacoco任务在Spring应用程序运行时添加合成字段,导致测试计数类中已声明字段的数量失败

如何使用 Spring Boot“bootJar”插件创建 gradle 任务以生成爆炸性战争?