[英]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.