【发布时间】:2020-11-09 00:05:55
【问题描述】:
尝试更深入地研究在涉及协程的情况下使用MockK。我有这个测试:
class UserDataUseCaseTest {
@MockK
val dataFetcherService: DataFetcherService = mockk()
@MockK
val userData: UserData = mockk()
@ExperimentalCoroutinesApi
@Test
fun `fetching salt populates user data salt value`() = runBlockingTest {
MockKAnnotations.init(this)
val userDataUseCase = UserDataUseCase(mockk(), mockk(), mockk())
every { userData.user_name } returns FAKE_USER
coEvery { dataFetcherService.getSaltForUser(FAKE_USER) } returns SALT_RESPONSE
userDataUseCase.getSaltForUser(userData)
assertEquals(SALT, userData.salt)
}
companion object {
private const val FAKE_USER = "fake_user"
private const val SALT = "salt"
private val SALT_RESPONSE = SaltResponse(
result = "",
title = "",
message = "",
salt = SALT,
auth_code = "auth_code",
userMustChangePassword = false
)
}
}
这会失败并出现以下错误:
io.mockk.MockKException:没有找到答案: DataFetcherService(#4).getSaltForUser(fake_user, continuation {})
我要测试的方法如下所示:
@VisibleForTesting
suspend fun getSaltForUser(userData: UserData) {
val saltResponse = dataFetcherService.getSaltForUser(userData.user_name)
with (userData) {
salt = if (saltResponse.salt.isEmpty())
KeyChainWrapper().generateRandomString(KeyChainWrapper.SALT_LEN)
else saltResponse.salt
authCode = saltResponse.auth_code
userMustChangePassword = saltResponse.userMustChangePassword
}
}
为什么我没有得到getSaltForUser() 电话的答复?感谢您的帮助。
【问题讨论】:
标签: android unit-testing mockk