3

我想使用androidx.fragment:fragment-testinglib 测试 DialogFragment。我调用launchFragmentInContainerand 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为 null。

我应该调用什么FragmentScenario来创建我的对话框?

4

1 回答 1

2

这在官方文档中有描述。我们需要调用launchFragment而不是launchFragmentInContainer

   launchFragment<PinCatsDialog>().let { scenario ->
       scenario
           .moveToState(Lifecycle.State.RESUMED)
           .onFragment { fragment ->
               // Code here
           }
    }
于 2020-09-14T11:36:15.890 回答