我需要测试一个接受另一个函数作为参数的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
内指定所需的参数,而且我不知道如何指定该函数。
这是正确的方向吗?或者我应该采取另一种方式(可能重新组织代码或做其他魔术)?
非常感谢答案 0 :(得分:1)
Mockito.any()
需要Class<T>
作为第一个参数,因此您要做的是获取Class
的{{1}}实例。
Kotlin不允许您编写() -> Unit
,但 允许您访问基础类(() -> 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)
这就是Mockito-Kotlin为你做的事情。