FragmentController vs FragmentScenario

问题描述 投票:0回答:1

Roblectric的FragmentController使我们能够将Fragment的生命周期驱动到所需状态。似乎FragmentScenario始终将被测Fragment置于其恢复状态。可以假设调用moveToState(CREATED)会将Fragment带回到其onCreate(),但实际上,根据docsmoveToState()模拟了一个外部应用程序,它与受测Fragment交互。这意味着moveToState(CREATED)会像启动新Fragment时一样,将被测onPause()移到onStop()Activity之间。

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

是否可以通过某种方式指示FragmentScenarioFragment驱动到所需状态,而不是始终通过onResume()?我们如何使用onCreate()测试onResume()内部而不是FragmentScenario内部发生了什么?我在这里想念什么吗?

android android-espresso robolectric android-fragmentscenario
1个回答
0
投票

[不确定在片段的onCreate期间为什么需要测试某些东西,但是我可以为片段提供假的viewmodel(模拟快乐的情况,等等-您可以按照以下步骤进行操作:]]

@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测试片段。

© www.soinside.com 2019 - 2024. All rights reserved.