Idea Gradle 集成将类添加为测试源代码树,但不包含在测试源代码集中



我想将我的系统测试源集的类标记为单元测试类。我尝试使用以下代码标记它们:

sourceSets {
main {
groovy {
srcDirs = [
'src/main/masks'
}
resources {
srcDirs += 'src/main/journaltemplates'
}
}
/* This brings up systest in the test resources */
test.java.srcDir 'src/systest/java'
test.resources.srcDir 'src/systest/resources'
systest {
java {
srcDirs = ['src/systest/java']
}
resources {
srcDirs = ['src/systest/resources']
}
}
}

使用此解决方案,源代码集被标记为单元测试类,但被额外添加到测试源代码集中,这是不需要的。我想将类保留在系统测试源集中,并指定系统测试源集是一个单元测试源集。我希望系统测试源集的行为与测试源集的行为相同,但它们应该是不同的源集。


我尝试的第二个解决方案是使用 gradle 的想法插件并修改模块设置,如这篇 SO 帖子所示:

idea {
module {
testSourceDirs += file('src/systest')
}
}

此解决方案的问题在于系统测试源也添加到测试源集中。

希望这足够清楚,否则请发表评论。谢谢。

有一个名为Declarative Test Suite的专用 Gradle 功能支持这种情况:

testing {
suites {
val test by getting(JvmTestSuite::class) {
useJUnitJupiter()
}
register("integrationTest", JvmTestSuite::class) {
dependencies {
implementation(project())
}
targets {
all {
testTask.configure {
shouldRunAfter(test)
}
}
}
}
}
}

更多: https://docs.gradle.org/current/userguide/java_testing.html#sec:configuring_java_integration_tests

请尝试以下配置:

apply plugin: "idea"
sourceSets {
systest {
java {
compileClasspath = test.output + main.output
runtimeClasspath = output + compileClasspath 
}
}
}
idea {
module {
testSourceDirs = sourceSets.systest.allSource.srcDirs
}
}

最新更新