如何解决Espresso pressBack检查后向导航是否与Jetpack Navigation Component一起使用
我目前正在测试导航(Jetpack + Espresso)。我有2个片段:
- 片段1包含一个RecyclerView
- 片段2用于向RecyclerView添加另一个条目
我已经编写了从片段1导航到片段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,然后按backback()验证是否已移至listfragment。基本上, clickAddItemButton_navigateToAddItemFragment 中的代码需要放在第二个测试的第一位。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。