简体   繁体   English

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

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

I'm currently testing my navigation (Jetpack + Espresso).我目前正在测试我的导航(Jetpack + Espresso)。 I have 2 fragments:我有2个片段:

  • Fragment 1 contains a RecyclerView片段 1 包含一个 RecyclerView
  • Fragment 2 is used to add another entry to the RecyclerView Fragment 2 用于向 RecyclerView 添加另一个条目

I've already written the test to navigate from Fragment 1 to Fragment 2:我已经编写了从 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()
        )
    }

How can I test the back navigation from Fragment2 to Fragment1?如何测试从 Fragment2 到 Fragment1 的返回导航? The test I have so far throws an exception:到目前为止,我的测试抛出了一个异常:

@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()
    )
}

Exception:例外:

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)

As per your failed test, you simply pressing back from AddItemFragment which is only fragment in your container.根据您失败的测试,您只需从AddItemFragment回退,它只是容器中的片段。 That is reason its failing.这就是它失败的原因。 To make it properly work, first launch ToDoListFragment , navigate to AddItemFragment then pressback() to verify you moved to listfragment.为了使其正常工作,首先启动ToDoListFragment ,导航到 AddItemFragment 然后按回()以验证您已移动到列表片段。 Basically code in clickAddItemButton_navigateToAddItemFragment need to placed first in second test.基本上clickAddItemButton_navigateToAddItemFragment 中的代码需要首先放在第二个测试中。

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

相关问题 Jetpack 导航组件处理带有底部导航的导航控制器及其返回堆栈导航 - Jetpack Navigation Component handle navigation controller with Bottom Navigation and it's Back Stack navigation Jetpack 导航组件上具有不同行为的后退和向上按钮 - Back and Up Button with different behavior on Jetpack Navigation Component 如何使用 Android Jetpack 的导航组件禁用后退导航并删除 Fragment 上的后退箭头? - How do I disable back navigation and remove the back arrow on a Fragment, using Android Jetpack's Navigation component? "在 Jetpack Compose 中实现后退导航" - Implementing back navigation in Jetpack Compose Android Jetpack 导航组件条件导航问题 - Android Jetpack Navigation component Condtional navigation issue 带有 Jetpack 导航组件的自定义工具栏 - Custom toolbar with Jetpack Navigation Component 导航组件,检查返回堆栈中是否存在片段 - Navigation component , check if fragment exists in back stack Jetpack 导航组件与 Jetpack Compose 兼容吗? - Jetpack Navigation Component with Jetpack Compose compatible? 带有底部导航视图和导航组件的后退导航 - Back navigation with bottom navigation view and navigation component 使用导航组件向后导航 - Navigating back with the Navigation Component
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM