Roblectric的FragmentController
使我们能够将Fragment
的生命周期驱动到所需状态。似乎FragmentScenario
始终将被测Fragment
置于其恢复状态。可以假设调用moveToState(CREATED)
会将Fragment
带回到其onCreate()
,但实际上,根据docs,moveToState()
模拟了一个外部应用程序,它与受测Fragment
交互。这意味着moveToState(CREATED)
会像启动新Fragment
时一样,将被测onPause()
移到onStop()
和Activity
之间。
要将片段驱动到不同的生命周期状态,请调用moveToState()。此方法支持以下状态作为参数:CREATED,STARTED,RESUMED和DESTROYED。此操作模拟一种情况,其中包含您的片段的活动会由于其他应用程序或系统操作而中断而更改其状态。
是否可以通过某种方式指示FragmentScenario
将Fragment
驱动到所需状态,而不是始终通过onResume()
?我们如何使用onCreate()
测试onResume()
内部而不是FragmentScenario
内部发生了什么?我在这里想念什么吗?
[不确定在片段的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测试片段。