我有一个Kotlin类(问题被简化为有一个基本的例子),其中有一个方法testedMethod()
我想测试交互。
我想确保将正确的参数传递给anotherMethod()
,我的问题是参数不是值而是 lambda函数。< / p>
我正在寻找Kotlin的一个简单解决方案,它可能会也可能不会基于this solution for java。
class TestedClass {
fun testedMethod() {
anotherMethod({ passedMethod() })
}
fun passedMethod() {}
fun anotherMethod(lambdaParameter: () -> Unit) {
// Does something with lambdaParameter
}
}
答案 0 :(得分:1)
这是我最终使用的解决方案。
基本上,您创建了一个spy
测试类,以便能够验证自己的方法,并使用argumentCaptor
捕获传递的lambda,并能够调用其中的内容。
import com.nhaarman.mockito_kotlin.argumentCaptor
import com.nhaarman.mockito_kotlin.spy
import com.nhaarman.mockito_kotlin.verify
@Test
fun lambdaParameterPassedIsCorrect() {
val testedClass = TestedClass()
val spyOfTestedClass = spy(testedClass)
val captor = argumentCaptor<() -> Unit>()
spyOfTestedClass.testedMethod()
verify(spyOfTestedClass).anotherMethod(captor.capture())
// Invoke the function passed as a parameter
// and then verify that the expected method was called
val function = captor.firstValue
function.invoke()
verify(spyOfTestedClass).passedMethod()
}
我仍然会对更简单的解决方案感兴趣。
答案 1 :(得分:0)
你可以使用mockito_kotlin库,它具有&#34;验证&#34;。
verify(TestedClass, times(1)).anotherMethod(eq(passedMethod))
哪个验证方法&#34; anotherMethod&#34; class&#34; TestedClass&#34;使用等于&#34; passedMethod&#34;
的参数调用一次