如何捕获传递给模拟函数的参数并返回它?

Bad*_*ler 10 kotlin mockk

所以在我正在测试的服务中,我有一个依赖服务,它接受一个对象并对其进行一些扩充。我想模拟依赖服务正在做的部分,并使模拟返回它所接收的内容。问题是我无权访问。

我试过这样的事情:

  val captureMyObject = slot<MyObject>()
  every { serviceX.doSomething(capture(captureMyObject)) } 
  returns captureMyObject.captured
Run Code Online (Sandbox Code Playgroud)

但它失败了: kotlin.UninitializedPropertyAccessException: lateinit property captured has not been initialized

Bad*_*ler 21

在 oleksiyp 评论之后,我重新阅读了文档。正确的做法是:

val captureMyObject = slot<MyObject>()
every { serviceX.doSomething(capture(captureMyObject)) } answers {captureMyObject.captured}
Run Code Online (Sandbox Code Playgroud)

  • 遇到这个我也有类似的错误。我只是想指出,如果您有抛出异常的代码,那么您期望调用的方法永远不会被调用,即没有捕获任何内容,您也会得到相同的错误。 (3认同)
  • 感谢您抽出宝贵时间回答您的问题。你解决了我的问题。你应该接受你的答案。 (2认同)