如何使用图中范围内的 ViewModel 测试片段

How to test a Fragment with a ViewModel scoped in a graph

我在 Android 上使用 navGraphViewModels ViewModel 范围界定,当我实施片段测试时,我什至无法开始测试。 我使用 mockito 模拟 NavigationController 并使用 documentation suggested aproachfragmentScenario。当尝试创建抛出异常的 ViewModel 时,问题就来了,因为 NavController#getBackStackEntry 没有被模拟,我不能模拟它,因为 NavController 是最终的 class.

我如何测试使用范围限定为导航图的 ViewModel?

经过很多时间我找到了答案。

您应该将片段 NavController 更改为您创建并更改的片段 ViewModelStore。在 Android 源代码的 test 中可以找到这方面的示例。

val scenario = launchFragmentInContainer<TestVMFragment>()
    navController.setViewModelStore(ViewModelStore())
    scenario.onFragment { fragment ->
        Navigation.setViewNavController(fragment.requireView(), navController)
    }
}