繁体   English   中英

FragmentController 与 FragmentScenario

[英]FragmentController vs FragmentScenario

Roblectric的FragmentController让我们来驱动的生命周期Fragment为期望的状态。 FragmentScenario似乎总是将被测试的Fragment带到恢复状态。 人们会假设调用moveToState(CREATED)将通过其onCreate()Fragment带回,但实际上,根据文档moveToState()模拟与被测Fragment交互的外部应用程序。 这意味着moveToState(CREATED)通过onPause()onStop() moveToState(CREATED)移动正在测试的Fragment ,就像启动新Activity时发生的那样。

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

是否有可能以某种方式直接FragmentScenario带动Fragment为期望的状态,而不是始终贯穿去onResume() 我们如何使用FragmentScenario测试在onCreate()内部发生的事情而不是在onResume()内部发生的事情? 我在这里错过了什么吗?

不确定为什么您需要在片段的 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 测试片段。

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM