Kotlin类的Gradle集成测试任务

Kotlin类的Gradle集成测试任务,kotlin,gradle,Kotlin,Gradle,我和Kotlin有一个Gradle项目,有3个源文件夹(主文件夹、测试文件夹、集成文件夹)。我想为单元测试和集成测试设置不同的梯度测试任务。这就是那些测试和集成文件夹的用途。我尝试了几种解决方案来设置集成测试任务,但到目前为止没有任何效果。到处都提到,我需要为集成创建不同的源代码集,添加一些配置,以便能够正确编译该文件夹中的代码,并设置任务本身。一切都完成了,但当我运行测试时,它们失败了。然后,报告说ClassNotFound的所有内容基本上都在(集成)文件夹中。 build.gradle文件和

我和Kotlin有一个Gradle项目,有3个源文件夹(主文件夹、测试文件夹、集成文件夹)。我想为单元测试和集成测试设置不同的梯度测试任务。这就是那些测试和集成文件夹的用途。我尝试了几种解决方案来设置集成测试任务,但到目前为止没有任何效果。到处都提到,我需要为集成创建不同的源代码集,添加一些配置,以便能够正确编译该文件夹中的代码,并设置任务本身。一切都完成了,但当我运行测试时,它们失败了。然后,报告说ClassNotFound的所有内容基本上都在(集成)文件夹中。 build.gradle文件和输出结果附在下面

buildscript {
    ext.kotlin_version = '1.3.71'
    ext.ktor_version = '1.3.2'
    ext.exposed_version = '0.22.1'
    ext.kodein_version = '6.5.0'
    ext.postgres_version = '42.2.6'
    ext.stripe_version = '17.16.0'
    ext.junit_version = '5.6.0'
    ext.log4j2_version = '2.13.1'
    ext.aws_sdk_version = '1.11.734'
    ext.html_to_pdf_version = '1.0.0'
    ext.kotlintest_version = '4.0.2'

    repositories {
        maven { url "https://kotlin.bintray.com/kotlinx" }
        maven { url "https://repository.jboss.org/nexus/content/repositories/thirdparty-releases/" }
        mavenCentral()
        maven { url "https://plugins.gradle.org/m2/" }
        jcenter()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "javax.jms:jms:1.1"
    }
}

plugins {
    id("java")
    id 'org.jetbrains.kotlin.jvm' version '1.3.71'
    id 'org.jetbrains.kotlin.plugin.serialization' version '1.3.71'
    id("application")
}

group 'nz.co.redium'

mainClassName = 'nz.co.redium.bookmybusiness.ApplicationKt'

repositories {
    mavenCentral()
    jcenter()
    maven { url "https://dl.bintray.com/kotlin/ktor" }
}

compileKotlin {
    kotlinOptions.jvmTarget = "12"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "12"
}

sourceSets {
    integration {
        java.srcDir "$projectDir/src/integration/kotlin"
        kotlin.srcDir "$projectDir/src/integration/kotlin"
        resources.srcDir "$projectDir/src/integration/resources"
        compileClasspath += main.output + test.output
        runtimeClasspath += main.output + test.output
    }
}

configurations {
    integrationImplementation.extendsFrom testImplementation
    integrationRuntime.extendsFrom testRuntime
}

test {
    useJUnitPlatform()

    afterTest { desc, result ->
        println "Executing test ${desc.name} [${desc.className}] with result: ${result.resultType}"
    }
}

//create a single Jar with all dependencies
task fatJar(type: Jar) {
    manifest {
        attributes 'Implementation-Title': 'Gradle Jar File Example',
                'Multi-Release': true,
                'Main-Class': "$mainClassName"
    }
    project.archivesBaseName = project.name + '-full'
    from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}

task integrationTest(type: Test) {
    useJUnitPlatform()

    description = 'Runs the integration tests.'
    group = 'verification'
    testClassesDirs = sourceSets.integration.output.classesDirs
    classpath = sourceSets.integration.runtimeClasspath
    outputs.upToDateWhen { false }
    mustRunAfter test

    afterTest { desc, result ->
        println "Executing test ${desc.name} [${desc.className}] with result: ${result.resultType}"
    }
}

check.dependsOn integrationTest

dependencies {
    implementation "io.ktor:ktor-server-core:$ktor_version"
    implementation "io.ktor:ktor-server-host-common:$ktor_version"
    implementation "io.ktor:ktor-server-netty:$ktor_version"
    implementation "io.ktor:ktor-jackson:$ktor_version"
    implementation "io.ktor:ktor-locations:$ktor_version"
    implementation "io.ktor:ktor-gson:$ktor_version"
    implementation "io.ktor:ktor-client-serialization:$ktor_version"
    implementation "io.ktor:ktor-client-serialization-jvm:$ktor_version"
    implementation "io.ktor:ktor-client-jetty:$ktor_version"
    implementation "org.kodein.di:kodein-di-generic-jvm:$kodein_version"
    implementation "org.jetbrains.exposed:exposed-core:$exposed_version"
    implementation "org.jetbrains.exposed:exposed-dao:$exposed_version"
    implementation "org.jetbrains.exposed:exposed-jdbc:$exposed_version"
    implementation "org.jetbrains.exposed:exposed-jodatime:$exposed_version"
    implementation "org.postgresql:postgresql:$postgres_version"
    implementation "org.apache.logging.log4j:log4j-api:$log4j2_version"
    implementation "org.apache.logging.log4j:log4j-core:$log4j2_version"
    implementation "org.apache.logging.log4j:log4j-slf4j-impl:$log4j2_version"
    implementation "org.springframework.security:spring-security-core:5.1.5.RELEASE"
    implementation "com.amazonaws:aws-java-sdk-ses:$aws_sdk_version"
    implementation "com.amazonaws:aws-java-sdk-s3:$aws_sdk_version"
    implementation "com.stripe:stripe-java:$stripe_version"
    implementation "org.apache.velocity:velocity-engine-core:2.1"
    implementation "com.openhtmltopdf:openhtmltopdf-core:$html_to_pdf_version"
    implementation "com.openhtmltopdf:openhtmltopdf-pdfbox:$html_to_pdf_version"
    implementation "com.fasterxml.jackson.module:jackson-module-kotlin:2.10.3"
    implementation "org.jetbrains.exposed:exposed-jodatime:$exposed_version"
    implementation "io.rest-assured:rest-assured:4.3.0"
    implementation "org.hamcrest:hamcrest:2.2"
    testImplementation "io.kotest:kotest-runner-junit5-jvm:$kotlintest_version" // for kotest framework
    testImplementation "io.kotest:kotest-assertions-core-jvm:$kotlintest_version" // for kotest core jvm assertions
    testImplementation "org.assertj:assertj-core:3.11.1"
    testImplementation "org.junit.jupiter:junit-jupiter-api:$junit_version"
    testImplementation "org.junit.jupiter:junit-jupiter-params:$junit_version"
    testImplementation "io.ktor:ktor-server-tests:$ktor_version"
    testImplementation "io.ktor:ktor-server-core:$ktor_version"
    testImplementation "io.ktor:ktor-server-host-common:$ktor_version"
    testImplementation "io.ktor:ktor-gson:$ktor_version"
    testImplementation "io.mockk:mockk:1.9.3"
    testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.3.5'
    testRuntime "org.junit.jupiter:junit-jupiter-engine:$junit_version"
}


奇怪的是,失败的任务指的是classes/java/integration文件夹(它不存在),而不是classes/kotlin/integratin文件夹(它确实存在,编译代码就在这里)

这是我的错。在我将代码从test移到integration文件夹后,其中的一些资源(负责初始化类的资源)指向旧目录test,而不是integration。Gradle生成文件是正确的

> Task :integrationClasses UP-TO-DATE
Skipping task ':integrationClasses' as it has no actions.
:integrationClasses (Thread[Daemon worker Thread 29,5,main]) completed. Took 0.0 secs.
:integrationTest (Thread[Daemon worker Thread 29,5,main]) started.
Gradle Test Executor 19 started executing tests.
Gradle Test Executor 19 finished executing tests.

> Task :integrationTest FAILED
file or directory '/opt/receptioner/bookmybusiness/build/classes/java/integration', not found
Caching disabled for task ':integrationTest' because:
  Build cache is disabled
Task ':integrationTest' is not up-to-date because:
  Task.upToDateWhen is false.
file or directory '/opt/receptioner/bookmybusiness/build/classes/java/integration', not found
Starting process 'Gradle Test Executor 19'. Working directory: /opt/receptioner/bookmybusiness Command: /usr/lib/jvm/java-13-openjdk-amd64/bin/java -Dorg.gradle.native=false @/tmp/gradle-worker-classpath16424721448345780337txt -Xmx512m -Dfile.encoding=UTF-8 -Duser.country=NZ -Duser.language=en -Duser.variant -ea worker.org.gradle.process.internal.worker.GradleWorkerMain 'Gradle Test Executor 19'
Successfully started process 'Gradle Test Executor 19'
Finished generating test XML results (0.0 secs) into: /opt/receptioner/bookmybusiness/build/test-results/integrationTest
Generating HTML test report...
Finished generating test html results (0.0 secs) into: /opt/receptioner/bookmybusiness/build/reports/tests/integrationTest
:integrationTest (Thread[Daemon worker Thread 29,5,main]) completed. Took 0.523 secs.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':integrationTest'.
> There were failing tests. See the report at: file:///opt/receptioner/bookmybusiness/build/reports/tests/integrationTest/index.html

* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.2.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 1s
13 actionable tasks: 1 executed, 12 up-to-date