Espresso检查AndroidX中下一个片段的内容导航

nhjlsmyf  于 2024-01-04  发布在  Android
关注(0)|答案(1)|浏览(219)

我用Espresso测试登录功能,只要我检查导航操作将用户带到具有正确ID的片段,它就可以正常工作。

  1. @Test
  2. fun loginLogout() {
  3. val fragmentArgs = bundleOf("numElements" to 0)
  4. val navController = TestNavHostController(ApplicationProvider.getApplicationContext())
  5. val titleScenario = launchFragmentInContainer<LoginFragment>(fragmentArgs, R.style.Theme_Ticketsmspayapp)
  6. titleScenario.onFragment { fragment ->
  7. navController.setGraph(R.navigation.graph_home)
  8. Navigation.setViewNavController(fragment.requireView(), navController)
  9. }
  10. // Login details filling and confirming
  11. assertEquals(navController.currentDestination?.id, R.id.eventsFragment)
  12. onView(ViewMatchers.withId(R.id.logout)).perform(ViewActions.click())
  13. }

字符串
接下来我想做的是按下正在打开的片段中包含的logout按钮,但看起来onView仍然引用登录片段的视图。是否可以让单个测试遵循导航图的视图hiylogy?

u59ebvdq

u59ebvdq1#

TestNavHostController实际上并不显示任何片段-它依赖于其他测试基础设施(如launchFragmentInContainer)来实际创建测试中的单个片段。
因此,即使在TestNavHostController上调用navigate之后,测试中的单个片段仍然会出现在屏幕上-您的测试所要做的就是验证LoginFragment是否根据您提供的输入在正确的时间正确地调用了navigate
您不需要测试附加到真实的NavController的真实的NavHostFragment是否在您调用navigate时实际上替换了您的Fragment--这不是您的代码,而是已经是covered by an extensive test suite的代码。
但是,如果您确实想编写完整的集成风格测试,那么您将不会使用TestNavHostController,而是测试完整的Activity并使用Activity中的实际NavHostFragment

相关问题