我在 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)
我的代码
构建.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 8 kotlin 1.4.31 我提到了这个mockk github问题但无法找出问题
您使用的是哪个版本的 gradle?检查兼容性可能很重要https://docs.gradle.org/current/userguide/compatibility.html.
否则我在使用 intellij 创建的空白项目中使用了您的示例,奇怪的是我没有这个问题。 代码示例
两种情况:
问题已通过最近更新的 io.mockk:mockk 库(或更新其库依赖项)解决了
您提供的代码示例无法识别问题