在我们的 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)