如何根据模拟中传递的参数从同一函数返回两个不同的模拟?

Kua*_*kov 6 testing android kotlin mockk

我正在测试一种方法。它两次请求模拟对象的相同功能,但传递了不同的参数。当然,我需要两个不同的答案,但是mockk给了我相同的答案。

every { userRepository.getUser("A") }.answers { userA }
every { userRepository.getUser("B") }.answers { userB }
Run Code Online (Sandbox Code Playgroud)

如何使用mock获得两个不同的结果?

ret*_*hab 7

正如问题评论中所述,只需指定参数即可实现这一点。

但如果涉及的条件比较多,通过捕获槽也可以达到同样的效果。

例如,如果我们想返回42用户的 id 是否为135否则:

val userSlot = slot<User>()
every { userRepository.saveUser(capture(userSlot)) } answers {
  if (userSlot.captured.id == 1) 42
  else 35
}
Run Code Online (Sandbox Code Playgroud)