使用ActivityTestRule进行浓缩咖啡测试中的多个活动

时间:2018-07-24 04:50:31

标签: android android-espresso

我有一个测试,我想在espresso中工作以获取应用程序中的所有(100多个)活动,并断言它们启动了一个意图来启动对话框活动。该测试可以在列表中的第一个活动(或者如果只有一个活动)上完美运行,但在第二个活动上则失败,因为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();
}

0 个答案:

没有答案