1

RoblectricFragmentController允许我们将生命周期驱动Fragment到所需的状态。似乎FragmentScenario总是将Fragment被测对象置于其恢复状态。有人会假设调用moveToState(CREATED)Fragment通过它返回onCreate(),但实际上,根据文档,模拟与被测moveToState()对象交互的外部应用程序。Fragment这意味着moveToState(CREATED)移动Fragment被测对象,onPause()并且onStop()在新产品发布时会发生这种情况Activity

要将片段驱动到不同的生命周期状态,请调用 moveToState()。此方法支持以下状态作为参数:CREATED、STARTED、RESUMED 和 DESTROYED。此操作模拟包含您的片段的活动更改其状态的情况,因为它被另一个应用程序或系统操作中断。

是否有可能以某种方式直接FragmentScenario将其驱动Fragment到所需状态而不是总是经历onResume()?我们如何测试发生在内部onCreate()而不是内部的事情onResume()using FragmentScenario?我在这里错过了什么吗?

4

1 回答 1

0

不知道为什么你需要在片段的 onCreate 期间测试某些东西,但我有案例为我的片段提供假视图模型(模拟快乐案例等) - 你可以按如下方式进行:

@Test fun yetAnotherTest(){

    val fakeViewModel = YourViewModel(fakeDependency1, fakeDependency2,...)

    val scenario: FragmentScenario<YourFragment> =
        launchFragmentInContainer {
            YourFragment().apply {
                viewModel = fakeViewModel
            }
        }
}

和一些小的修改

lateinit var viewmodel: YourViewModel

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    //if this is yetAnotherTest() run, line is skipped 
    if (!::viewModel.isInitialized) {
        //normal setup
        viewModel = provideYourViewModel()
    }

或者,您可以为您的片段提供FragmentFactory,以便您可以更轻松地使用 FragmentScenario 测试片段。

于 2020-03-21T09:54:22.270 回答