java.lang.NoClassDefFoundError:io/mockk/proxy/jvm/advice/jvm/JvmMockKProxyInterceptor ERROR while mocking org.w3c.dom.Node using mockk

ukqbszuj  于 5个月前  发布在  Java
关注(0)|答案(2)|浏览(70)

bounty已结束,回答此问题可获得+100声望奖励,奖励宽限期21小时后结束,Teocali希望引起更多关注此问题。

我在Kotlin中有一个使用xml的gradle项目(javax.xml.bind:jaxb-api:2.3.1)。我想测试我的解析逻辑,因此我需要模拟我的Node(org.w3c.dom.Node)。然而,在模拟过程中,我遇到了这个错误。

io/mockk/proxy/jvm/advice/jvm/JvmMockKProxyInterceptor java.lang.NoClassDefFoundError: io/mockk/proxy/jvm/advice/jvm/JvmMockKProxyInterceptor
at java.xml/org.w3c.dom.Node$Subclass0.getNodeName(Unknown Source)

字符串
我的代码
build.gradle.kts

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    kotlin("jvm") version "1.8.0"
    application
}

group = "me.shantiswaruptunga"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1")
    implementation("javax.xml.bind:jaxb-api:2.3.1")
    testImplementation(kotlin("test"))
    testImplementation("io.mockk:mockk:1.12.4")
}

tasks.test {
    useJUnitPlatform()
}

tasks.withType<KotlinCompile> {
    kotlinOptions.jvmTarget = "1.8"
}

application {
    mainClass.set("MainKt")
}


XMLTest.kt

import io.mockk.every
import io.mockk.mockk
import org.junit.jupiter.api.Test
import org.w3c.dom.Node

class XmlTest {
    @Test
    fun test2() {
        val node1 = mockk<Node>()
        every { node1.nodeName } returns "x"
    }
}


同样的代码也可以在jdk 8Kotlin1.4.31中使用,我引用了这个mockk github issue,但无法解决问题

kyvafyod

kyvafyod1#

您使用的是哪个版本的gradle?检查兼容性https://docs.gradle.org/current/userguide/compatibility.html可能很重要。
另外,我在一个用intellij创建的空白项目中使用了你的例子,奇怪的是我没有这个问题。这个测试用例工作得很好。code example
两种情况:

  • 最近更新了io.mockk:mockk库(或者更新了它的库依赖项),这个问题已经解决了
  • 无法通过您提供的代码示例识别问题
kzipqqlq

kzipqqlq2#

看起来这个问题与代码或依赖关系无关,而是与工具链有关。
我也遇到过同样的问题,用Mockk嘲笑SSLServerSocket。
解决方案,一个对我有帮助的解决方案,是将jdk更改为一些更新的版本(我使用Android Studio,并将其更改为:构建工具->Gradle->{project}->Gradle JDK)。
在应用了较新的jdk之后,我可以用mocks运行我的测试了。

相关问题