【问题标题】:Trying to convert this Mockito test to Mockk results in error尝试将此 Mockito 测试转换为 Mockk 会导致错误
【发布时间】:2019-09-11 23:32:24
【问题描述】:

以下从 Mockito 到 Mockk 的转换存在问题。

所以我有这个

@Mock
private lateinit var loginLiveDataObserver: Observer<LoginResult>

val inOrder = inOrder(loginLiveDataObserver)

inOrder.verify(loginLiveDataObserver).onChanged(enableLoading)
inOrder.verify(loginLiveDataObserver).onChanged(loginResults)
inOrder.verify(loginLiveDataObserver).onChanged(disableLoading)

试着把它变成这个

private val loginLiveDataObserver = mockk<Observer<LoginResult>>()

verifyOrder {
    loginLiveDataObserver.onChanged(enableLoading)
    loginLiveDataObserver.onChanged(loginResults)
    loginLiveDataObserver.onChanged(disableLoading)
}

给我以下错误

io.mockk.MockKException:没有找到答案:Observer(#4).onChanged(Loading(value=true))

【问题讨论】:

  • 不是因为粘性不同吗?在 mockk 你需要指定所有的行为。
  • 好吧嗯,我可以看到,但后来我不知所措 private val enableLoading = LoginResult.Loading(true) 是一个密封类 sealed class LoginResult { data class Success(val user: CurrentUserResponse) : LoginResult() data class Loading(val value: Boolean): LoginResult() data class Failure(val reason: String): LoginResult() } 那么我该如何模拟我尝试过的结果... coEvery { LoginResult .Loading(true) } 返回 LoginResult.Loading(true) 但它仍然返回相同的错误。
  • 另外我不知道这个 @RunWith(MockitoJUnitRunner::class) 在 mockk 中的替代品是什么我试过 @RunWith(MockKJUnitRunner::class) 但我找不到它
  • 如果你不想紧张,你可以尝试轻松的模拟(查看文档)。从评论中很难理解你有什么代码。以正确的格式提交 github 问题,我会尽力提供帮助。另请查看本文以获取高级案例blog.kotlin-academy.com/…
  • 没有替代的运行方式,因为它不是必需的。尽管您可以根据需要使用 JUnit 5 扩展(查看相应的文档部分)

标签: android unit-testing kotlin mockk


【解决方案1】:

您的例外说明了一切(也是直接答案之一),您始终必须指定模拟的行为..

在你的情况下:

private val loginLiveDataObserver = mockk<Observer<LoginResult>>()

// Example answer you can use different here
every { loginLiveDataObserver.onChange(any()) } answers nothing

verifyOrder {
    loginLiveDataObserver.onChanged(enableLoading)
    loginLiveDataObserver.onChanged(loginResults)
    loginLiveDataObserver.onChanged(disableLoading)
}

此时检查Documentation 并在示例中查找every { ... } 部分

希望这会有所帮助。

【讨论】:

  • 你能解释更多关于answers nothing的信息吗?
  • @GiovankaBisano 在这里找到文档mockk.io/#answers,上面写着:specify that the matched call answers null
猜你喜欢
  • 2020-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多