无法在Android Espresso测试中获得正在测试的活动

时间:2015-09-21 23:17:32

标签: android android-testing android-espresso

在我们的Espresso测试中,我们需要自定义启动意图以传递自定义附加功能等。因此,我们将launchActivity标记设置为false

@Rule
public final ActivityTestRule<CreateQuoteActivity> mActivityRule = new ActivityTestRule<>(
        CreateQuoteActivity.class, true, false
);

现在,我想获得对被测活动的引用。如果该标记为true,我会使用mActivityRule.getActivity()。但是,现在mActivityRule.getActivity()会返回null

如何获得对活动的引用?

3 个答案:

答案 0 :(得分:2)

如果您已将launchActivity设置为false,则只有在实际开始并启动时才能访问该活动。

所以,你的活动背景就在那里:

final CreateQuoteActivity activity = mActivityRule.launchActivity(mIntent);

答案 1 :(得分: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);
}

答案 2 :(得分:-1)

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

有问题的基本代码如下。

 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;
}