无法在Android Espresso测试中获取被测活动

3
在Espresso测试中,我们需要自定义启动意图以传递自定义额外信息等。因此,我们将launchActivity标志设置为false
@Rule
public final ActivityTestRule<CreateQuoteActivity> mActivityRule = new ActivityTestRule<>(
        CreateQuoteActivity.class, true, false
);

现在,我想获取被测试的activity的引用。如果标志是true,那么我将使用mActivityRule.getActivity()。然而,现在mActivityRule.getActivity()返回null

我该如何获取activity的引用?

3个回答

2
如果您将launchActivity设置为false,则只有在实际启动它时才能访问该活动。因此,您的活动上下文就在那里:
final CreateQuoteActivity activity = mActivityRule.launchActivity(mIntent);

0
使用ActivityTestRule,您可以为每个测试配置一个Intent。
@Test
public void myTest() {
    Intent intent = new Intent();
    intent.putExtra(TAG_EXTRA, XXX);
    mActivityRule.launchActivity(intent);

    //......
}

如果所有测试的意图相同,您可以在@Before方法中设置它。
@Before
public void setUp() {
    Intent intent = new Intent();
    intent.putExtra(TAG_EXTRA, XXX);
    mActivityRule.launchActivity(intent);
}

-1

如果您启动一个活动,然后在此之后启动第二个活动,您可以使用已发布的方法here获取当前正在恢复的活动实例。

有关问题的基本代码如下。

 public static Activity getActivityInstance() {
   getInstrumentation().runOnMainSync(new Runnable() {
      public void run() {
         Collection resumedActivities = ActivityLifecycleMonitorRegistry.getInstance()
               .getActivitiesInStage(RESUMED);
         if (resumedActivities.iterator().hasNext()) {
            resumedActivity = (Activity) resumedActivities.iterator().next();
         }
      }
   });
   return resumedActivity;
}

1
这是一个更通用(和hackish)的获取活动的方法,非常好,谢谢。不过,对于这种情况,答案更加直接。请参见被接受的答案。 - espinchi
2
那段代码怎么编译?你从未在任何地方声明过 resumedActivity。即使你声明了,它也是在一个 Runnable 内部设置的。 - AutonomousApps

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接