我需要测试接受另一个函数作为参数的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
的,但它确实允许您访问的基础类() -> 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为您提供的服务。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句