繁体   English   中英

Espresso pressBack() 检查后退导航是否适用于 Jetpack 导航组件

[英]Espresso pressBack() to check if back navigation works with Jetpack Navigation Component

我目前正在测试我的导航(Jetpack + Espresso)。 我有2个片段:

  • 片段 1 包含一个 RecyclerView
  • Fragment 2 用于向 RecyclerView 添加另一个条目

我已经编写了从 Fragment 1 导航到 Fragment 2 的测试:

    @Test
    fun clickAddItemButton_navigateToAddItemFragment() {
        val navController = mock(NavController::class.java)
        launchFragmentInHiltContainer<ToDoListFragment> {
            Navigation.setViewNavController(requireView(), navController)
        }
        onView(withId(R.id.fabAddItem)).perform(click())
        verify(navController).navigate(
            ToDoListFragmentDirections.actionToDoListFragmentToAddItemFragment()
        )
    }

如何测试从 Fragment2 到 Fragment1 的返回导航? 到目前为止,我的测试抛出了一个异常:

@Test
fun pressBackButton_navigateToListFragment() {
    val navController = Mockito.mock(NavController::class.java)
    launchFragmentInHiltContainer<AddItemFragment> {
        Navigation.setViewNavController(requireView(), navController)
    }

    // simulate back button press
    pressBack()

    // verify navigation to second fragment
    Mockito.verify(navController).navigate(
        AddItemFragmentDirections.actionAddItemFragmentToToDoListFragment()
    )
}

例外:

androidx.test.espresso.NoActivityResumedException: Pressed back and killed the app
at dalvik.system.VMStack.getThreadStackTrace(Native Method)
at java.lang.Thread.getStackTrace(Thread.java:1538)
at androidx.test.espresso.base.DefaultFailureHandler.getUserFriendlyError(DefaultFailureHandler.java:96)
at androidx.test.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:59)
at androidx.test.espresso.ViewInteraction.waitForAndHandleInteractionResults(ViewInteraction.java:322)
at androidx.test.espresso.ViewInteraction.desugaredPerform(ViewInteraction.java:178)
at androidx.test.espresso.ViewInteraction.perform(ViewInteraction.java:119)
at androidx.test.espresso.Espresso.pressBack(Espresso.java:229)

根据您失败的测试,您只需从AddItemFragment回退,它只是容器中的片段。 这就是它失败的原因。 为了使其正常工作,首先启动ToDoListFragment ,导航到 AddItemFragment 然后按回()以验证您已移动到列表片段。 基本上clickAddItemButton_navigateToAddItemFragment 中的代码需要首先放在第二个测试中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM