我们如何验证以lambda函数为参数的方法



所以我有一个调用printResult((方法的main((方法,而printResult(在第二个参数上有一个lambda参数,如下所示:

class SomeClass() {
fun main(value: Int) {
printResult(value){ it ->
it + it
}
}

fun printResult(value: Int, sum: (Int) -> Int) {
val result = sum(value)
println(result)
}
}

然后在单元测试中,我想验证每次调用main((方法时,是否也应该调用printResult((。所以我这样写单元测试:

@Test
fun testMain_shouldInvokePrintResult() {
someClass.main(10)
verify(someClass).printResult(10){ any() }
}

我不知道应该为printResult((方法传递什么参数,这就是我使用any((的原因。但当我运行测试时,编译器说:

Argument(s) are different! Wanted:
someClass.main(
10,
() (kotlin.Exception /* = java.lang.Exception */) -> kotlin.Unit
);
-> at com.mydomain.test.testMain_shouldInvokePrintResult(SomeClassTest.kt:49)
Actual invocations have different arguments:
someClass.main(
10,
() (kotlin.Exception /* = java.lang.Exception */) -> kotlin.Unit
);
-> at com.mydomain.SomeClass.printResult$lambda-27(SomeClass.kt:20)

所以编译器基本上说了不同的参数,但在两次调用中都没有显示什么不同。我该怎么办?任何帮助都将不胜感激。。

它解决了。所以我的同事告诉我在括号内使用any((,而不是花括号。所以它会是这样的:

@Test
fun testMain_shouldInvokePrintResult() {
someClass.main(10)
verify(someClass).printResult(10, any())
}

相关内容

  • 没有找到相关文章

最新更新