gpt4 book ai didi

kotlin - 如何在界面中模拟 Kotlin 扩展功能?

转载 作者:行者123 更新时间:2023-12-02 13:23:19 26 4
gpt4 key购买 nike

我有一个接口(interface)的扩展功能,如下所示:

import javax.jms.ConnectionFactory

fun ConnectionFactory.foo() {
println("do some stuff")
}

如何模拟函数 foo?
请注意,我在 http://mockk.io/#extension-functions 中看到了类和对象的方法。 ,但它不起作用。我试过这个:
import io.mockk.classMockk
import io.mockk.every
import org.junit.Test
import javax.jms.ConnectionFactory

class ExtensionFunctionTest {
@Test
fun mockExtensionFunction() {
val connectionFactory = classMockk(ConnectionFactory::class)
every { connectionFactory.foo() } returns println("do other stuff")
connectionFactory.foo()
}
}

它抛出异常:
io.mockk.MockKException: Missing calls inside every { ... } block.

最佳答案

根据documentation如果是模块范围的扩展功能,您需要 staticMock为扩展功能创建的“隐藏”类。
这是一个示例(假设文件名是 com/sample/extmockingtest/SampleTest.kt ):

fun <T> Iterable<T>.foo(): String  = "do some stuff"

class ExtensionFunctionTest {
@Test
fun mockExtensionFunction() {
val itMock = classMockk(Iterable::class);
staticMockk("com.sample.extmockingtest.SampleTestKt").use {
every {
itMock.foo()
} returns "do other stuff"

assertEquals("do other stuff", itMock.foo())

verify {
itMock.foo()
}
}
}
}

关于kotlin - 如何在界面中模拟 Kotlin 扩展功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50011161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com