【发布时间】: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