具有多个源集的Gradle下的JUnit 5

我有一个项目,我正在把我想要使用JUnit 5。 我已经在单元测试中正常工作了。

然而,我确实有多个测试源集 – 我还有一个用于验收测试。 我正在努力研究如何让JUnit 5在一个任务中运行src / test中定义的单元测试,并在另一个任务中运行“acceptanceTest”sourceSet中定义的“验收测试”,并位于“src / acceptance”中任务。

我以前有过使用JUnit 4和Cucumber的工作,但JUnit 5插件似乎并不想这样工作。

的build.gradle:

buildscript { ext { jackson_version = "2.9.0.pr4" // IntelliJ needs M4 junitJupiter_version = "5.0.0-M4" junitPlatform_version = "1.0.0-M4" kotlin_version = "1.1.3-2" slf4j_version = "1.7.25" spring_version = "4.3.10.RELEASE" springBoot_version = "1.5.4.RELEASE" springBootAdmin_version = "1.5.2" runAcceptance = System.properties['noAcceptance'] == null } repositories { mavenCentral() jcenter() } dependencies { classpath "com.github.ben-manes:gradle-versions-plugin:0.15.0" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version" classpath "org.junit.platform:junit-platform-gradle-plugin:$junitPlatform_version" classpath "org.springframework.boot:spring-boot-gradle-plugin:$springBoot_version" } } plugins { id "com.github.ben-manes.versions" version "0.15.0" } apply plugin: "com.github.ben-manes.versions" apply plugin: "kotlin" apply plugin: "kotlin-spring" apply plugin: "org.junit.platform.gradle.plugin" apply plugin: "org.springframework.boot" apply plugin: "war" repositories { mavenCentral() maven { url "https://jitpack.io" } } sourceSets { acceptanceTest { kotlin { compileClasspath += main.output + test.output runtimeClasspath += main.output + test.output srcDir file('src/acceptance/kotlin') } resources.srcDir file('src/acceptance/resources') } } configurations { acceptanceTestCompile.extendsFrom testCompile acceptanceTestRuntime.extendsFrom testRuntime } dependencies { compile "com.graphql-java:graphql-java-tools:3.1.3" compile "com.graphql-java:graphql-spring-boot-starter:3.5.0" compile "com.zaxxer:HikariCP:2.6.3" compile("de.codecentric:spring-boot-admin-server:$springBootAdmin_version") { exclude group: "junit", module: "junit" } compile("de.codecentric:spring-boot-admin-server-ui:$springBootAdmin_version") { exclude group: "junit", module: "junit" } compile("de.codecentric:spring-boot-admin-starter-client:$springBootAdmin_version") { exclude group: "junit", module: "junit" } compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" compile "org.slf4j:slf4j-api:$slf4j_version" compile "org.springframework:spring-jdbc:$spring_version" compile "org.springframework.boot:spring-boot-starter-web:$springBoot_version" compile "org.springframework.boot:spring-boot-starter-actuator:$springBoot_version" compile "ru.yandex.qatools.embed:postgresql-embedded:2.2" runtime "ch.qos.logback:logback-classic:1.2.3" runtime "org.jolokia:jolokia-core:1.3.7" runtime "org.liquibase:liquibase-core:3.5.3" runtime "org.postgresql:postgresql:42.1.3" runtime "org.slf4j:jcl-over-slf4j:$slf4j_version" runtime "org.slf4j:jul-to-slf4j:$slf4j_version" testCompile "com.github.sbrannen:spring-test-junit5:1.0.0.M4" testCompile "com.nhaarman:mockito-kotlin:1.5.0" testCompile("org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version") { exclude group: "junit", module: "junit" } testCompile "org.junit.jupiter:junit-jupiter-api:$junitJupiter_version" testRuntime "org.junit.jupiter:junit-jupiter-engine:$junitJupiter_version" acceptanceTestCompile "org.springframework.boot:spring-boot-starter-test:$springBoot_version" } task acceptanceTest(type: Test) { testClassesDirs = sourceSets.acceptanceTest.output.classesDirs classpath = sourceSets.acceptanceTest.runtimeClasspath outputs.upToDateWhen { false } } if (ext.runAcceptance) { check.dependsOn acceptanceTest } acceptanceTest.mustRunAfter test task wrapper(type: Wrapper) { gradleVersion = "4.0" } 

JUnit 5插件仅创建一个任务 – junitPlatformTest ,并将其基于junitPlatform扩展。

如果你想运行验收测试,或者单独设置另一个源代码中的任何其他类型的测试,你将需要创建自己的JavaExec任务,就像插件一样。

请参阅: https : //github.com/junit-team/junit5/blob/master/junit-platform-gradle-plugin/src/main/groovy/org/junit/platform/gradle/plugin/JUnitPlatformPlugin.groovy#L66

你可能想要像这样创建一个任务:

 task e2eTest( type: JavaExec, description: 'Runs the e2e tests.', group: 'Verification' ) { dependsOn testClasses shouldRunAfter test classpath = sourceSets.e2e.runtimeClasspath main = 'org.junit.platform.console.ConsoleLauncher' args = ['--scan-class-path', sourceSets.e2e.output.getClassesDirs().asPath, '--reports-dir', "${buildDir}/test-results/junit-e2e"] }