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

MockK: no answer found because the mock is modified from outside

各位开发者大家好,

我有以下问题:

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

class UseCaseX (private val repository: Repository) {

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

}

现在,此 UseCaseX 用于 class 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{} 期间被扩展了一个附加参数,到目前为止还没有答案。

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

使用 withContext(Dispatchers.Default) 而不是 async。应该可以!