如何解决使用 Espresso 使用 NavGraphViewModel 进行 UI 测试 Viewpager
我目前有一个应用程序,它使用一个活动-多个片段的方法,在这个应用程序中有一个片段与其子项共享重要数据,因此我使用了范围为嵌套导航图的 navGraphViewModels,如下所示:>
private val viewModel by navGraphViewModels<MySharedViewModel>(R.id.nested_nav_graph)
父片段包含一个viewPager,传递给该viewPager 的片段都与父片段共享相同的viewModel。 我使用这种方法的问题是,当涉及使用 Espresso 的 navGraphViewModels 的 UI 测试时,我收到错误“View XXX 没有设置 NavController”。我设法使用以下内容为 parent 片段修复了此问题:
val navController = TestNavHostController(ApplicationProvider.getApplicationContext())
// This allows fragments to use by navGraphViewModels()
navController.setViewModelStore(ViewModelStore())
UiThreadStatement.runOnUiThread {
navController.setGraph(R.navigation.nested_nav_graph)
}
val scenario =
launchFragmentInContainer(themeResId = R.style.AppTheme) {
MyFragment().also { fragment ->
fragment.viewLifecycleOwnerLiveData.observeForever { viewLifecycleOwner ->
if (viewLifecycleOwner != null) {
Navigation.setViewNavController(fragment.requireView(),navController)
}
}
}
}
return navController
}
但是,由于父片段随后将其子片段加载到 viewPager 中,并且这些子片段也需要 NavController,因此我的测试不会通过 @Before 块进行。任何有关如何将 navController 设置为子片段的帮助将不胜感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。