尝试 运行 EspressoTest 时 NavController 出现问题

Problem with NavController when trying to run EspressoTest

我收到这个错误:

IllegalStateException: View android.widget.LinearLayout{649700d V.E...... ......I. 0,0-0,0} does not have a NavController set

但这只发生在浓缩咖啡测试中。发生崩溃的代码处理了我片段上的 onBackPressed:

val navController = Navigation.findNavController(view)//this line here
        requireActivity().onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
            override fun handleOnBackPressed() {
                navController.popBackStack(R.id.homeFragment, false)
            }
        })

这是我的 Espresso 测试:

    @Test
    fun testBackButton() {
        val mockNavController = mock(NavController::class.java)
        settingsFragmentScenario = launchFragmentInContainer()
        settingsFragmentScenario.onFragment {
            Navigation.setViewNavController(it.requireView(), mockNavController)
        }
        performClickOnViews(android.R.id.home)
        verify(mockNavController).navigate(R.id.home)
    }

如果我删除片段测试中的代码 运行 没有任何错误(除了我断言的错误)

我检查过:,但是 his/her 问题和我的不一样。

PS:在生产代码中,此行不会崩溃

我设法通过替换解决了这个问题:

val navController = Navigation.findNavController(view)//this line here
        requireActivity().onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
            override fun handleOnBackPressed() {
                navController.popBackStack(R.id.homeFragment, false)
            }
        })

与:

requireActivity().onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
            override fun handleOnBackPressed() {
                view.findNavController().popBackStack(R.id.homeFragment, false)
            }
        })

说明,导航控制器是在我的测试视图中使用 setViewNavController 设置的,因此我不得不更改我的生产代码:)