DialogFragment的FragmentScenario,未调用onCreateDialog

问题描述

我想使用androidx.fragment:fragment-testing lib测试DialogFragment。 我叫launchFragmentInContainermovetoState(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
           }
    }