android - MockK协程响应无法响应
问题描述
试图更深入地使用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()
接到电话?谢谢你的帮助。
解决方案
从该示例代码的外观来看,被测类没有使用与测试中定义的模拟相同的模拟:
val userDataUseCase = UserDataUseCase(mockk(), mockk(), mockk())
应该是这样的
val userDataUseCase = UserDataUseCase(dataFetcherService, mockk(), mockk())
取决于DataFetcherService
应该是哪个参数
推荐阅读
- javascript - 问题安装 sqlite3 (..\src\database.cc(35): error C2248: 'Napi::Env::DefaultFini': 无法访问在类 'Napi::Env' 中声明的私有成员
- r - 使用 R VennDiagram 进行颜色填充:“'填充'的意外参数长度”
- python-3.x - 排查 Python api 请求错误消息“远程结束关闭连接没有响应”
- python - pytorch闪电模型的输出预测
- database - 允许具有空值和特殊值的 Oracle 唯一索引
- c# - 如何为 DataGridView 字段指定我自己的比较器代码?
- visual-studio-code - 如何停止具有彩色选项卡名称的 VSCode
- performance - 在 jmeter 中使用流模式进行分块编码和 sun.net.www.protocol.http.HttpURLConnection writeRequests
- python - Numpy 数组作为模型的输入
- python - Python:OSError:无法打开共享对象文件:Ubuntu 20.04 上没有这样的文件或目录