android - 将 ActivityTestRule 用于 Espresso 测试中的多个活动
问题描述
我有一个测试,我想在 espresso 中工作以获取我的应用程序中的所有(100 多个)活动,并断言它们启动了一个 Intent 来启动一个对话活动。测试在列表中的第一个活动上完美运行(或者如果只有一个活动),但在第二个活动上失败,因为 espresso 试图将其转换为第一个活动。
我必须使用 ActivityTestRule 而不是直接从上下文启动活动,否则 Intendo 预期的断言不起作用。
大多数文档都显示 espresso 在每次测试中设置一个活动,这在我的情况下是不可能的,因为我正在动态加载活动列表。
Espresso 正在保存某种我不知道如何清除的内部状态。有谁知道如何在 for 循环中的断言之间清除它?
或者除了 ActivityTestRule 之外还有另一个没有内部状态的类也适用于预期?
这是我要测试的示例:
ActivityInfo[] activities =
appContext
.getPackageManager()
.getPackageInfo(appContext.getPackageName(), PackageManager.GET_ACTIVITIES)
.activities;
for (ActivityInfo activityInfo : activities) {
String className = activityInfo.name;
ActivityTestRule activityTestRule =
new ActivityTestRule<>((Class<Activity>) Class.forName(className));
Intent intent = new Intent()
.setClassName(appContext, className)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
activityActivityTestRule.launchActivity(intent);
intended(hasComponent(ExpectedDialogActivity.class.getName()));
activityActivityTestRule.finishActivity();
}
解决方案
推荐阅读
- mongodb - 使用 $graphLookup 使用 Mongo 进行分层查询
- android - 如何从 javascript 中的 WebView 获取我的 Android / iOS 应用程序的权限?
- grails - 在上下文验证期间,池化的 LdapTemplate 会停滞几分钟
- javascript - Polymer 3 插槽后备内容总是被渲染,无论它是否在宿主元素中被覆盖
- univocity - 使用 Univocity Parser 验证解析的字段
- mysql - MySQL 错误 1111 - 嵌套窗口函数时组函数的使用无效
- javascript - 如何在多个 div 类中添加脚本
- machine-learning - 是否可以在 Google Dataprep 中拆分数据集?如果是这样,怎么做?
- c++ - 使用 constexpr 替换 #define 和 #ifdef 进行条件编译
- python - 使 CSV 转义双引号