Тестовое задание интеграции Gradle для Kotlin классов - PullRequest
2 голосов
/ 10 апреля 2020

У меня есть проект Gradle с Kotlin с 3 исходными папками (основная, тестовая, интеграционная). Я хочу настроить различные тестовые задания Gradle для модульных и интеграционных тестов. Вот для чего предназначены эти тестовые и интеграционные папки. Я попробовал несколько решений для настройки задачи тестирования интеграции, но пока ничего не получалось. Везде упоминается, что мне нужно создать другой исходный набор для интеграции, добавить некоторую конфигурацию, чтобы можно было правильно скомпилировать код в этой папке и настроить саму задачу. Это все сделано, но когда я запускаю тесты, они терпят неудачу. Затем в отчете указывается 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"
}

> 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

Странно, что сбойная задача ссылается на папку classes / java /gration (которая не существует) вместо classes / kotlin Папка / integratin, которая существует и в которой находится скомпилированный код.

1 Ответ

0 голосов
/ 10 апреля 2020

Это было мое плохо. После того, как я переместил код из папки тестирования в папку интеграции, некоторые ресурсы внутри (те, которые отвечают за инициализацию классов) указывали на старый тест каталога, а не на интеграцию. Файл сборки Gradle правильный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...