繁体   English   中英

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

[英]Mock kotlin function as parameter in 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)
}

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

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

非常感谢

Mockito.any()需要Class<T>作为第一个参数,所以您要做的是获取() -> UnitClass实例。 科特林不允许你写(() -> 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为您提供的服务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM