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

基奥利

我需要测试接受另一个函数作为参数的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)
}

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

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

非常感谢

纳尔曼

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

因此,要获得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为您提供的服务。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Kotlin 如何在参数中模拟函数

在Kotlin中传递和使用函数作为构造函数参数

Lambda 作为 Android onClicklistener 中的函数参数

如何在Kotlin中将函数作为参数传递-Android

Kotlin Lambda 函数作为参数

我应该如何使用 Kotlin 将 lambda 函数作为参数传递给 Android 中的另一个函数

Kotlin中的Elvis“ if”运算符作为函数默认参数

创建Arraylist作为接受Kotlin中任何类型的函数的参数

Kotlin 改造中调用函数作为发送参数的问题

如何在 Kotlin 的函数类型中接收 null 作为参数

为什么在Kotlin中可以将高阶函数的扩展函数参数作为常规函数调用?

如何在使用 ctypes.byref 作为参数之一的 Python 中模拟 ctypes 函数

在Kotlin中将函数作为参数传递

Kotlin:将函数范围作为参数传递

Kotlin批注作为通用函数参数

Kotlin如何使setOnClickListener接受函数作为参数

我能否获得对Kotlin中具有默认参数的函数的函数引用作为无参数函数?

向量作为函数中的参数

如何在 android 活动测试中模拟 koin 注入的 bean 并捕获作为该模拟参数给出的 lambda?

在Kotlin中模拟伴侣对象函数

Kotlin中的构造函数与参数

函数作为Javascript中函数的参数

R中作为函数参数的不同函数

Kotlin-将sortBy参数作为函数参数传递

Kotlin-将函数数组作为函数的参数传递

Kotlin中通用通配符作为参数

通过接口作为Kotlin中的参数

通过链函数作为参数作为PHP中的参数

如何在Android中模拟Kotlin对象?