问题描述
我想使用androidx.fragment:fragment-testing
lib测试DialogFragment。
我叫launchFragmentInContainer
和movetoState(Lifecycle.State.RESUMED)
,但是这个片段中没有叫onCreateDialog
。
@Test
fun `submit search - presenter state is changed`() {
val p: PinCatsPresenter = F.presenter(PinCatsPresenter.COMPONENT_ID)!!
launchFragmentInContainer<PinCatsDialog>().let { scenario ->
scenario
.movetoState(Lifecycle.State.RESUMED)
.onFragment { fragment ->
assertFalse(p.state.isFiltered)
fragment.dialog!!.findViewById<SearchView>(R.id.search_field).let {
it.isIconified = false
it.setQuery("ea",true)
}
awaitUi()
assertTrue(p.state.isFiltered)
assertEquals(3,p.state.count)
}
}
}
我调试了应用程序,并确保早于onCreateDialog
调用onResume
,但在此测试方案中未调用onCreateDialog
,因此fragment.dialog
为空。 / p>
应该调用什么FragmentScenario
,以便创建对话框?
解决方法
这在official documentation中有描述。我们需要调用launchFragment
而不是launchFragmentInContainer
:
launchFragment<PinCatsDialog>().let { scenario ->
scenario
.moveToState(Lifecycle.State.RESUMED)
.onFragment { fragment ->
// Code here
}
}