1

所以我有这个调用 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)

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

4

1 回答 1

0

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

@Test
fun testMain_shouldInvokePrintResult() {
   someClass.main(10)
   verify(someClass).printResult(10, any())
}
于 2022-02-24T10:33:27.343 回答