Q&A:如何在Android中模拟Kotlin顶级扩展函数?

zkure5ic  于 2023-04-12  发布在  Kotlin
关注(0)|答案(1)|浏览(136)

这是一个自我的“问答”帖子,用来跟踪我的问题并完成对它的研究。
我正在寻找一个模拟WorkManager)的选项。它利用LiveData和它的asFlow()扩展函数调用。我正在寻找一种方法来模拟这个LiveData.asFlow()调用。
在这一刻,许多答案是不是一个很适合,所以我决定写这个新的职位。
)使用WorkManager的代码应该放在androidTest包中,但我的限制迫使我寻找一个普通test包的解决方案。

t40tm48m

t40tm48m1#

Kotlin extensions被认为是Java静态方法。
Mockito从v5开始就内置了对这些功能的支持。在v5之前,它可以手动启用。
但是,通过使用Mockito,我无法测试LiveDataasFlow()扩展。
Mockk是另一个替代方案。@file:JvmName("FlowLiveDataConversions")应该特别注意,因为它覆盖了应该在mockkStatic(<full path>)中定义的包名。

val flow = flow {
            val workInfo: WorkInfo
            workInfo = WorkInfo(UUID.randomUUID(), WorkInfo.State.SUCCEEDED, Data.EMPTY, emptyList(), Data.EMPTY, 0, 0)
            emit(workInfo)
        }
        mockkStatic("androidx.lifecycle.FlowLiveDataConversions")
        every {
            mockedLiveData.asFlow()
        } returns flow
        `when`(workManager.getWorkInfoByIdLiveData(any()))
            .thenReturn(mockedLiveData)

相关问题