试图在涉及协同线的情况下更深入地使用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
)
}
}如果出现以下错误,这将失败:
DataFetcherService(#4).getSaltForUser(fake_user,
io.mockk.MockKException:找不到答案:io.mockk.MockKException {})
我试图测试的方法如下所示:
@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()电话的答案?谢谢你的帮助。
发布于 2020-07-30 10:47:17
从该示例代码的外观来看,所测试的类没有使用与测试中定义的相同的模拟:
val userDataUseCase = UserDataUseCase(mockk(), mockk(), mockk())应该是这样的
val userDataUseCase = UserDataUseCase(dataFetcherService, mockk(), mockk())取决于DataFetcherService应该是哪个参数
https://stackoverflow.com/questions/62983519
复制相似问题