testing - 使用 Gradle : NoClassDefFoundError TableTestingKt 进行表驱动测试

标签 testing gradle kotlintest table-driven

我使用 kotlintest在用于单元和集成测试的 Spring Boot 项目中。我可以在 IntelliJ 中毫无问题地运行我的单元测试,并且所有测试都是绿色的。但是,当我使用 ./gradlew clean test 在 gradle 中运行我的测试时,我所有的测试都使用 table()headers()row() 函数失败,出现以下异常:

java.lang.NoClassDefFoundError: io/kotlintest/tables/TableTestingKt
    at com.tractive.hwservice.MessageContentExtensionsSpec$7.invokeSuspend(MessageContentExtensionsSpec.kt:110)
    at com.tractive.hwservice.MessageContentExtensionsSpec$7.invoke(MessageContentExtensionsSpec.kt)
    at io.kotlintest.runner.jvm.TestCaseExecutor$executeTest$supervisorJob$1$invokeSuspend$$inlined$map$lambda$1.invokeSuspend(TestCaseExecutor.kt:130)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:32)
    at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:233)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: java.lang.ClassNotFoundException: io.kotlintest.tables.TableTestingKt
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
    ... 8 more

所有其他测试都很好。

这是我的 build.gradle 的一部分:

repositories {
    mavenCentral()
}

dependencyManagement {
    dependencies {
        dependency 'ch.qos.logback.contrib:logback-classic:1.1.7'
        dependency 'ch.qos.logback.contrib:logback-json-classic:0.1.5'
        dependency 'ch.qos.logback.contrib:logback-jackson:0.1.5'
        dependency 'com.fasterxml.jackson.core:jackson-databind:2.9.3'
        dependency 'com.fasterxml.jackson.module:jackson-module-kotlin:2.9.7'
        dependency 'org.assertj:assertj-core:3.9.1'
    }
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-amqp'
    implementation 'org.springframework.boot:spring-boot-starter-integration'
    implementation 'org.jetbrains.kotlin:kotlin-reflect'
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'

    compile 'org.springframework.boot:spring-boot-starter-data-mongodb'
    compile 'org.springframework.boot:spring-boot-starter-web'
    compile 'com.fasterxml.jackson.core:jackson-databind'
    compile 'ch.qos.logback.contrib:logback-jackson'
    compile 'ch.qos.logback.contrib:logback-json-classic'
    compile 'com.fasterxml.jackson.module:jackson-module-kotlin'

    testCompile 'org.assertj:assertj-core'
    testCompile 'org.junit.jupiter:junit-jupiter-api'
    testCompile 'org.junit.jupiter:junit-jupiter-params'
    testCompile 'de.flapdoodle.embed:de.flapdoodle.embed.mongo'

    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework.amqp:spring-rabbit-test'
    testImplementation 'io.kotlintest:kotlintest-runner-junit5:3.3.3'
    testImplementation 'io.kotlintest:kotlintest-extensions-spring:3.3.3'
    testImplementation 'io.kotlintest:kotlintest-assertions:3.3.3'

}

jacocoTestReport {
    reports {
        xml.enabled true
    }
}

test {
    useJUnitPlatform ()
    finalizedBy jacocoTestReport
}

根据我的阅读,我什至不需要 io.kotlintest:kotlintest-assertions 依赖项,因为它应该包含在运行器中。

看起来 TableTestingKt 没有像应该的那样转换为类。

最佳答案

这一切都归结为错误的 Java 版本——我在 IntelliJs 设置中设置了 Java 11,但我的 JavaHome 指向导致此错误的 Java 10。

关于testing - 使用 Gradle : NoClassDefFoundError TableTestingKt 进行表驱动测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58518135/

相关文章:

java - Gradle 错误 - 无法下载 okhttp.jar 文件 2.7.2

android - 如何验证特定的 lambda 方法是否已作为 mockito 的参数传递

kotlin - Intellij 显示 build.gradle.kts 中的每一行都是红色的

kotlin - 在 KotlinTest 中应该和应该完全正确有什么区别?

php - 如何测试使用字符串正文发送的 Laravel 邮件,而不是使用 Mailable

grails - 如何在功能上测试依赖的Grails应用程序

eclipse - 如何使我的Gradle项目自动在Eclipse中构建?

android - 使用Gradle从APK中删除库项目

testing - 如何使用带参数化类型的 assertEqual

testing - 澄清测试面试中的问题