gpt4 book ai didi

android - 模拟 kotlin 函数作为 Android 中的参数

转载 作者:行者123 更新时间:2023-11-29 18:57:13 25 4
gpt4 key购买 nike

我需要测试接受另一个函数作为参数的 Kotlin 函数。该类看起来像这样:

class MyClass(val myInstance: MyObject) {

fun toBeTested(text: String, number: Int) {
myInstance.doSomething(text, otherFunction(number))
...
}
}

到目前为止我的测试是这样的

@Test
fun testFunction() {
val mockInstance = mock(MyObject::class.java)

myClass.toBeTested("test", 15)
}

我想使用 verify(mockInstance, times(1)).doSomething() 但我需要在 doSomething 中指定它需要的参数,我不知道如何指定函数。

这是正确的方向吗?或者我应该采取另一种方式(可能重新组织代码或做一些其他魔术)?

非常感谢

最佳答案

Mockito.any()需要 Class<T>作为第一个参数,所以你要做的是获取 Class () -> Unit 的实例.Kotlin 不允许你写 (() -> Unit)::class.java ,但它确实允许您访问 () -> Unit 的基础类: Function0 .

所以得到Class<() -> Unit>您需要,您可以执行以下操作:

val f : Class<() -> Unit> = Function0::class.java as Class<Function0<Unit>>

您可以将此类传递给 any调用:

verify(mockInstance, times(1)).doSomething(any(f))

现在这不是很漂亮,所以你可以定义一个自定义 any()为您完成所有这些神奇的功能:

inline fun <reified T : Any> myAny() = Mockito.any(T::class.java)

这让您可以执行以下操作:

verify(mockInstance, times(1)).doSomething(myAny<() -> Unit>())
// or:
verify(mockInstance, times(1)).doSomething(myAny())

这就是Mockito-Kotlin在后台为您做。

关于android - 模拟 kotlin 函数作为 Android 中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49769923/

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