尝试深入使用涉及协程的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,延续{})
我要测试的方法如下:
@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()
电话的答案?感谢您的帮助。
答案 0 :(得分:0)
从该示例代码的外观看,被测类没有使用与测试中定义的相同的模拟:
val userDataUseCase = UserDataUseCase(mockk(), mockk(), mockk())
应该类似于
val userDataUseCase = UserDataUseCase(dataFetcherService, mockk(), mockk())
取决于DataFetcherService
应该是哪个参数