[英]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>
作为第一个参数,所以您要做的是获取() -> Unit
的Class
实例。 科特林不允许你写(() -> 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为您提供的服务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.