此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,但无法解决问题
2条答案
按热度按时间kyvafyod1#
您使用的是哪个版本的gradle?检查兼容性https://docs.gradle.org/current/userguide/compatibility.html可能很重要。
另外,我在一个用intellij创建的空白项目中使用了你的例子,奇怪的是我没有这个问题。这个测试用例工作得很好。code example
两种情况:
kzipqqlq2#
看起来这个问题与代码或依赖关系无关,而是与工具链有关。
我也遇到过同样的问题,用Mockk嘲笑SSLServerSocket。
解决方案,一个对我有帮助的解决方案,是将jdk更改为一些更新的版本(我使用Android Studio,并将其更改为:构建工具->Gradle->{project}->Gradle JDK)。
在应用了较新的jdk之后,我可以用mocks运行我的测试了。