【问题标题】:MockK Coroutine Response Fails to AnswerMockK协程响应无法响应
【发布时间】: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


    【解决方案1】:

    从该示例代码的外观来看,被测类使用的模拟与测试中定义的模拟不同:

    val userDataUseCase = UserDataUseCase(mockk(), mockk(), mockk())
    

    应该是这样的

    val userDataUseCase = UserDataUseCase(dataFetcherService, mockk(), mockk())
    

    取决于DataFetcherService应该是哪个参数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-22
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      相关资源
      最近更新 更多