使用Spring Profiles(集成测试)运行Gradle任务

13

需要通过Gradle和Spring配置文件来运行测试。

gradle clean build

我已添加任务:

task beforeTest() {
    doLast {
      System.setProperty("spring.profiles.active", "DEV")
    }
}

test.dependsOn beforeTest

我的测试定义如下:

@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles("TestProfile")
public class SomeTest {

但是这个结构对我没用。

Gradle 运行测试。

4个回答

24

我认为你想在运行时/测试JVM中设置系统属性,但却错误地在构建时JVM(即Gradle守护进程)中设置了系统属性。

请参阅Test.systemProperty(String, Object)

例如:

test {
    systemProperty 'spring.profiles.active', 'DEV'
}

...还有一点需要注意,关于你的尝试。请注意任务有一个doFirst方法和一个doLast方法,因此您不需要为您尝试的内容创建单独的任务。


谢谢,但这并没有帮助到我。 - yazabara
请注意,在 build.gradle 文件中需要添加此属性。 - Ravik

2
这对我有用
tasks.withType<Test> {
    systemProperty("spring.profiles.active", "DEV")
}

1
这对我有效:
test {
    systemProperty 'spring.profiles.active', 'ci'
}

现在当我执行gradlew test时,它会使用ci配置文件运行。

1
doFirst {...} 里面你不应该做这件事情,这是任务配置应该在配置阶段而不是执行阶段完成。参见 构建生命周期 - lance-java

-1

不知道这是否为一个非常晚的回复?但我遇到了类似的问题。

  1. 在springboot src/test/*文件夹中使用@Profiles。
  2. @ActiveProfiles实际上是被激活的(查看日志时),但在使用gradle test执行时它不使用@Profile。然而,在Eclipse编辑器中执行JUnit测试时,@Profile是有效的。

所以最终我发现@Profile需要在src/main/*文件夹中。Gradle测试似乎优先于/src/main而不是/src/test。因此,我的@Profile("test")被转换为@Profile("!test")。在gradle构建中没有添加spring.profiles.active。

否定配置文件


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接