Gradle: 使集成测试源模块工作
Gradle: make integration test source module work
我有一个简单的多模块 Java Gradle 项目。单元测试 运行 很好,但我无法为集成测试添加工作源集。测试已编译(我看到编译错误),并出现在控制台输出中,但未执行(现有测试应该失败)。
此外,在 IntelliJ IDEA 中,显示了源集,但不是作为测试模块。
我在测试旁边的装订线中看到 "run" 图标,但是 运行ning 测试给出了
> No tests found for given includes: [de.cotto.integration_tests.moduletwo.ModuleTest.name](filter.includeTestsMatching)
.
我的问题:
- 我需要更改什么才能进行测试 运行(使用
./gradlew build
)?
- 如何让 IntelliJ IDEA 将源集提取为 "test" 模块?
- 如何运行 IntelliJ IDEA 的测试?
- Java 14 个模块的奖励积分 (commit)
源集定义:
sourceSets {
integrationTest {
compileClasspath += sourceSets.main.output
runtimeClasspath += sourceSets.main.output
}
}
configurations {
integrationTestImplementation.extendsFrom testImplementation
integrationTestRuntimeOnly.extendsFrom runtimeOnly
}
task integrationTest(type: Test) {
description = 'Runs integration tests.'
group = 'verification'
testClassesDirs = sourceSets.integrationTest.output.classesDirs
classpath = sourceSets.integrationTest.runtimeClasspath
shouldRunAfter test
}
check.dependsOn integrationTest
- Gradle6.4.1
- JUnit 5
- Java 14 和 11
- 带和不带 Java 模块(JPMS、Jigsaw)
- IntelliJ IDEA 2020.1.2
$ ./gradlew clean check --no-build-cache --console=plain
> Task :module-one:clean
> Task :module-two:clean
> Task :module-two:processResources NO-SOURCE
> Task :module-two:processTestResources NO-SOURCE
> Task :module-two:processIntegrationTestResources NO-SOURCE
> Task :module-one:compileJava
> Task :module-one:processResources NO-SOURCE
> Task :module-one:classes
> Task :module-two:compileJava
> Task :module-two:classes
> Task :module-one:compileTestJava
> Task :module-one:processTestResources NO-SOURCE
> Task :module-one:testClasses
> Task :module-two:compileTestJava
> Task :module-two:testClasses
> Task :module-two:compileIntegrationTestJava
> Task :module-two:integrationTestClasses
> Task :module-one:test
> Task :module-one:check
> Task :module-one:jar
> Task :module-two:test
> Task :module-two:integrationTest <-- What happens here? Why doesn't the test fail?
> Task :module-two:check
BUILD SUCCESSFUL in 2s
11 actionable tasks: 11 executed
两件遗失。下面只定义了test
模块的JUnit,不定义integrationTest
。参见 https://discuss.gradle.org/t/integration-tests-not-being-run/28745。
test {
useJUnitPlatform()
}
因此,必须满足以下条件之一:
integrationTest {
useJUnitPlatform()
}
或
tasks.withType(Test) {
useJUnitPlatform()
}
此外,JUnit 运行time 不可用于集成测试。这可以通过包含测试 运行time dependencies:
来解决
而不是 integrationTestRuntimeOnly.extendsFrom runtimeOnly
使用 integrationTestRuntimeOnly.extendsFrom testRuntimeOnly
.
如果我添加这两个更改,将使用 ./gradlew check
执行测试。
我还能够 运行 从 IntelliJ IDEA 内部进行测试。
我有一个简单的多模块 Java Gradle 项目。单元测试 运行 很好,但我无法为集成测试添加工作源集。测试已编译(我看到编译错误),并出现在控制台输出中,但未执行(现有测试应该失败)。
此外,在 IntelliJ IDEA 中,显示了源集,但不是作为测试模块。
我在测试旁边的装订线中看到 "run" 图标,但是 运行ning 测试给出了
> No tests found for given includes: [de.cotto.integration_tests.moduletwo.ModuleTest.name](filter.includeTestsMatching)
.
我的问题:
- 我需要更改什么才能进行测试 运行(使用
./gradlew build
)? - 如何让 IntelliJ IDEA 将源集提取为 "test" 模块?
- 如何运行 IntelliJ IDEA 的测试?
- Java 14 个模块的奖励积分 (commit)
源集定义:
sourceSets {
integrationTest {
compileClasspath += sourceSets.main.output
runtimeClasspath += sourceSets.main.output
}
}
configurations {
integrationTestImplementation.extendsFrom testImplementation
integrationTestRuntimeOnly.extendsFrom runtimeOnly
}
task integrationTest(type: Test) {
description = 'Runs integration tests.'
group = 'verification'
testClassesDirs = sourceSets.integrationTest.output.classesDirs
classpath = sourceSets.integrationTest.runtimeClasspath
shouldRunAfter test
}
check.dependsOn integrationTest
- Gradle6.4.1
- JUnit 5
- Java 14 和 11
- 带和不带 Java 模块(JPMS、Jigsaw)
- IntelliJ IDEA 2020.1.2
$ ./gradlew clean check --no-build-cache --console=plain
> Task :module-one:clean
> Task :module-two:clean
> Task :module-two:processResources NO-SOURCE
> Task :module-two:processTestResources NO-SOURCE
> Task :module-two:processIntegrationTestResources NO-SOURCE
> Task :module-one:compileJava
> Task :module-one:processResources NO-SOURCE
> Task :module-one:classes
> Task :module-two:compileJava
> Task :module-two:classes
> Task :module-one:compileTestJava
> Task :module-one:processTestResources NO-SOURCE
> Task :module-one:testClasses
> Task :module-two:compileTestJava
> Task :module-two:testClasses
> Task :module-two:compileIntegrationTestJava
> Task :module-two:integrationTestClasses
> Task :module-one:test
> Task :module-one:check
> Task :module-one:jar
> Task :module-two:test
> Task :module-two:integrationTest <-- What happens here? Why doesn't the test fail?
> Task :module-two:check
BUILD SUCCESSFUL in 2s
11 actionable tasks: 11 executed
两件遗失。下面只定义了test
模块的JUnit,不定义integrationTest
。参见 https://discuss.gradle.org/t/integration-tests-not-being-run/28745。
test {
useJUnitPlatform()
}
因此,必须满足以下条件之一:
integrationTest {
useJUnitPlatform()
}
或
tasks.withType(Test) {
useJUnitPlatform()
}
此外,JUnit 运行time 不可用于集成测试。这可以通过包含测试 运行time dependencies:
来解决而不是 integrationTestRuntimeOnly.extendsFrom runtimeOnly
使用 integrationTestRuntimeOnly.extendsFrom testRuntimeOnly
.
如果我添加这两个更改,将使用 ./gradlew check
执行测试。
我还能够 运行 从 IntelliJ IDEA 内部进行测试。