2017-07-25 37 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") 

}