小编nia*_*l8s的帖子

模拟 FusedLocationProviderClient 和使用 Koin 进行依赖注入的单元测试

在我们的 Android 应用程序中,我们使用 Google Maps API 来显示用户位置。目前我们正在使用 Koin 来将 FusedLocationProviderClient 依赖项的参数注入(它需要一个活动)提供到我们的 Fragment 类中。从理论上讲,这应该可以更直接地测试和模拟 Client 类(使用 mockk)。但是,在尝试使用 Android FragmentScenario 运行测试时,测试似乎在某个地方无限循环(调试没有给出原因的答案)。有没有人对如何与我们正在使用的框架一起进行测试有任何进一步的想法。Android/Google 文档不提供任何帮助,也没有提供大量时间浏览网络。

我们尝试在注入和不注入 FusedLocationProvideClient 的情况下进行测试。我们尝试在我们的测试类中启动 Koin 测试模块,使用活动参数化和不使用活动参数化,似乎没有任何区别。FusedLocationProviderClient 被模拟为relaxed 设置为true。

测试类:

private val viewModel = mockk<LocationSelectionViewModel>(relaxed = true)
    private val locationClient = mockk<FusedLocationProviderClient>(relaxed = true)


    override var testModule = module {
        viewModel { viewModel }
        factory { locationClient }
    }

    @Test
    fun itShouldDoSomethingWithLocation() {
        val scenario = FragmentScenario.launchInContainer(LocationSelectionDialogFragment::class.java)
        scenario.moveToState(Lifecycle.State.RESUMED)
        scenario.onFragment {
            val location = Location("this")
            location.latitude = 37.422
            location.longitude = -122.084
            location.accuracy = …
Run Code Online (Sandbox Code Playgroud)

android google-maps fusedlocationproviderapi mockk koin

6
推荐指数
1
解决办法
663
查看次数