【问题标题】:How to test with Espresso a PendingIntent generated by TaskStackBuilder如何使用 Espresso 测试由 TaskStackBuilder 生成的 PendingIntent
【发布时间】:2016-09-27 15:37:37
【问题描述】:

我正在我们的应用程序中开发一些很酷的推送通知并进行一些测试以涵盖当用户单击其中一个通知时应用程序启动正确的意图以打开正确的活动。

在我们的应用程序中,我们有一个 StartupActivity,它捕获所有这些推送通知并使用正确的附加信息路由到正确的屏幕。 使用Espresso 完成的涵盖正确启动的 UI 测试如下所示:

    @Test
    public void showsANotificationAndOpensTheCorrectScreen() throws
            UiObjectNotFoundException {
        sendBroadcast(PushNotificationBuilder
                .withAction("com.xxxx.android.gcm.SOMETHING")
                .withType("SOME_TYPE")
                .withRelatedId(ANY_ID)
                .withTitle(ANY_TITLE)
                .build());

        tapNotificationWithTitle(ANY_TITLE);

        intended(allOf(
                hasComponent(DesitinyActivity.class.getCanonicalName()),
                hasExtra("extra_id", Long.valueOf(ANY_ID)),
                hasExtra("extra_other_extra", true)));
    }

如您所见,此测试模拟接收通知,点击它并检查是否抛出了正确 Activity 的 Intent。

当我们有一个不在第一级的屏幕时问题就来了,例如典型的细节屏幕,我们需要构建一个活动堆栈。为此,我们使用TaskStackBuilder 来生成一个带有所有意图堆栈的 PendingIntent。 示例代码,在给定最终 Activity 的意图的情况下生成堆栈:

private PendingIntent generateexampleTaskBuilder(Context context, Intent intentToTheFinalScreen) {
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
        stackBuilder.addNextIntent(ExampleActivity.getLaunchIntent(someExtra, context));
        stackBuilder.addNextIntent(intent);
        return stackBuilder.getPendingIntent(PushIdIntegerGenerator.getUniquePushId(),
                PendingIntent.FLAG_UPDATE_CURRENT);
    }

问题是intended espresso 方法永远不会验证这个 Pending Intent 并且测试永远不会通过。如果我将挂起的意图更改为正常和直接的意图,则测试通过。所以我们可以假设方法 expected() 不能捕获待处理的意图。

是否有任何形式来测试待处理的意图?

【问题讨论】:

  • 以防万一有人来这里寻找如何使用 TaskStackBuilder 的意图进行存根。您需要通过堆栈层次结构存根所有活动意图。

标签: android testing android-intent android-pendingintent android-espresso


【解决方案1】:

Espresso Intents 是一种密封测试解决方案。当您通过 Intent 与其他应用程序通信时,它可以让您使用 Espresso 进行测试。

由于您停留在应用程序的边界内,因此请考虑通过验证每个导航步骤中是否显示正确的屏幕来测试您的 UI。你如何从一个屏幕转到另一个屏幕是一个实现细节。点击通知 > 显示验证标题 > 按返回 > 显示验证列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多