2017-07-25 30 views
5

我有一个项目,我将它放在一起,我想使用JUnit 5。我已经在单元测试中正常工作了。具有多个源组的Gradle中的JUnit 5

但是我确实有多个测试源集 - 我还有一个用于验收测试。我正在努力研究如何让JUnit 5在一个任务中运行src/test中定义的单元测试 - 在另一个任务中运行Acceptance Tests - 在“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" 
} 
+0

你能告诉我们你的build.gradle的相关部分吗?你还可以在Junit5中运行你的任何测试吗? –

+0

刚刚添加我的整个build.gradle到帖子。运行“gradle test”将成功运行单元测试,但不会验收测试。但是我可以从IntelliJ里面单独运行它们。 (我会说我对Gradle很新颖 - 直到最近才成为一名Maven用户 - 所以它可能不是最好的结构化构建脚本!) – Graham

回答

1

您可能希望创建这样一个任务:

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"] 
} 
1

由于摇篮4.6 gradle这个Java插件具有JUnit 5 support

所以一旦你已经配置了测试源集,setupSo的操作非常简单,如下所示 - 对于我的testintTest测试任务,我只需将其配置为使用JUnit5:

apply plugin: 'java' 

test { 
    useJUnitPlatform() 
} 

intTest { 
    useJUnitPlatform() 
} 

dependencies { 
    testCompile("org.junit.jupiter:junit-jupiter-api:5.1.0") 
    testRuntime("org.junit.jupiter:junit-jupiter-engine:5.1.0") 

}