gpt4 book ai didi

android - 如何使用 Espresso 测试由 TaskStackBuilder 生成的 PendingIntent

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:35:43 24 4
gpt4 key购买 nike

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

在我们的应用程序中,我们有一个 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。

当我们有一个不在第一层的屏幕(例如典型的详细信息屏幕)时,问题就来了,我们需要构建一个 Activity 堆栈。为此,我们使用 TaskStackBuilder 生成一个包含所有 Intent 堆栈的 PendingIntent。给定最终 Activity 的 Intent 生成堆栈的示例代码:

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,测试也从不通过。如果我将挂起的 Intent 更改为正常和直接的 Intent ,则测试通过。因此我们可以假设 intended() 方法无法捕获未决 Intent 。

是否有任何表格来测试未决的 Intent ?

最佳答案

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

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

关于android - 如何使用 Espresso 测试由 TaskStackBuilder 生成的 PendingIntent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39728840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com