【问题标题】:Navigating between Fragments in Espresso UI test在 Espresso UI 测试中的片段之间导航
【发布时间】:2021-03-25 22:40:05
【问题描述】:

我正在尝试使用 Espresso 编写一个跨多个片段运行的 UI 测试。他们共享一个通过by activityViewModels() 注入的视图模型。 我正在使用 Android Navigation 组件、Dagger Hilt 注入和模拟的 NavController,如下所示:

val navController = Mockito.mock(NavController::class.java)
launchFragmentInHiltContainer<AddRecipeFragment1> {
    Navigation.setViewNavController(requireView(), navController)
}
// Here I need to initialize some data in viewModel...

在此之后,我想导航到另一个我真正想要测试的 Fragment,但无论是按下调用导航的按钮还是调用 navController.navigate(AddRecipeFragment1Directions.toAddRecipeFragment2()) 都不适合我。

使用launchFragmentInHiltContainer&lt;AddRecipeFragment&gt;... 的方法将重新启动整个应用程序并删除视图模型。 有什么想法吗?

【问题讨论】:

    标签: android android-espresso android-navigation dagger-hilt


    【解决方案1】:

    同时我找到了一个解决方法:

    private lateinit var viewModel: AddRecipeViewModel
    
    @Before
    fun beforeEach() {
        ...
    
        navController = Mockito.mock(NavController::class.java)
        launchFragmentInHiltContainer<AddRecipeFragment2> {
            val viewModelTemp: AddRecipeViewModel by activityViewModels()
            viewModel = viewModelTemp
            Navigation.setViewNavController(requireView(), navController)
        }
    }
    

    这样我至少可以在我的测试中直接访问委托的 ViewModel。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      相关资源
      最近更新 更多