MockK:未找到答案,因为模拟是从外部修改的

时间:2020-11-10 14:34:39

标签: unit-testing kotlin junit mocking mockk

您好,其他开发人员,

我有以下问题:

假设我有一个名为UseCaseX的类:

class UseCaseX (private val repository: Repository) {

    override suspend fun invoke(params: Unit?) = repository.call()

}

现在,此UseCaseX在ViewModel类中使用,如下所示:

    ...
    val result = async { useCaseX.invoke(null) }
    ...

然后,我使用MockK在ViewModelTest中模拟UseCaseX,如下所示:

val useCaseX = mockk<UseCaseX>(relaxUnitFun = true)

然后出现以下错误:

io.mockk.MockKException: no answer found for: UseCaseX(#7).invoke(null, continuation {})
at io.mockk.impl.stub.MockKStub.defaultAnswer(MockKStub.kt:90)
at io.mockk.impl.stub.MockKStub.answer(MockKStub.kt:42)

显然,UseCaseX.invoke(params)函数在async{}期间扩展了一个附加参数,到目前为止,还没有答案。

问题:在这种情况下,如何为模拟提供答案?

1 个答案:

答案 0 :(得分:0)

使用withContext(Dispatchers.Default)代替async。应该工作!