Android Espresso:意向匹配器和androidx PreferenceFragments

问题描述 投票:0回答:1

我最近迁移了我的首选项实现以使用androidx.preference。这导致我的一项仪器测试失败,并且我没有找到合理的解决方法来使它通过。

在测试中,如果满足应用程序首选项中的某些条件,我将显示一个对话框,显示错误。在此测试中,将禁用特定的首选项。用户可以单击错误以打开特定的首选项,然后进入并进行更改。问题是我不知道如何断言是否显示了正确的PreferenceFragment。

失败的测试看起来像这样:

@Test
fun whenWorklistNotEnabled_shouldDisplayWorklistNotEnabledMessage() {
    val manager = PreferenceManagerImpl(InstrumentationRegistry.getInstrumentation().targetContext)
    whenever(preferenceManagerSpy.worklistEnabled).thenReturn(false)
    whenever(preferenceManagerSpy.openDicomSettings()).thenAnswer { manager.openWorklistSettings() }

    launchWorklistDialog()

    onView(withErrorMessageView(R.id.dialog_worklist_errorview))
        .check(
            matches(
                allOf(
                    isDisplayed(),
                    withPrimaryErrorText(R.string.global_worklist_disabled_error),
                    withSecondaryErrorText(R.string.dialog_worklist_worklist_disabled_error_secondary_text)
                )
            )
        )
        .perform(ErrorMessageViewActions.actionOnSecondaryTextContainer(click()))

    intended(
        allOf<Intent>(
            IntentMatchers.hasComponent(
                ComponentName(
                    InstrumentationRegistry.getInstrumentation().targetContext,
                    SettingsActivity::class.java
                )
            ),
            IntentMatchers.hasExtra(
                PreferenceActivity.EXTRA_SHOW_FRAGMENT,
                WorklistFragment::class.java
            )
        )
    )
}

但是当您不再使用PreferenceActivity实现时,如何重写它以匹配特定的PreferenceFragment?

android android-espresso android-testing
1个回答
0
投票
Recorded intents: -Intent { cmp=com.example/.preferences.SettingsActivity (has extras) } handling packages:[[com.example]], extras:[Bundle[{EXTRA_SHOW_DICOM_FRAGMENT=class com.example.preferences.WorklistFragment}]])

解决方案:

intended(
    allOf<Intent>(
        IntentMatchers.hasComponent(
            ComponentName(
                InstrumentationRegistry.getInstrumentation().targetContext,
                SettingsActivity::class.java
            )
        ),
        IntentMatchers.hasExtra(
            EXTRA_SHOW_WORKLIST_FRAGMENT,
            WorklistFragment::class.java
        )
    )
)
© www.soinside.com 2019 - 2024. All rights reserved.