如何测试 Espresso 活动之间的滑动?

How to test swiping between Activities in Espresso?

我正在 Espresso 中创建一个测试,它调用 swipeRight() 转到设置行为的 MainActivity,然后返回 ConsumerSettingsActivity 测试 Views。然而,问题是在调用滑动之后,我得到一个 NoActivityResumedException 指向带有 R.id.mode_text 的第二条测试线。

@RunWith(AndroidJUnit4.class)
public class ConsumerSettingsActivityTest {

private ConsumerSettingsActivity mConsumerSettingsActivity;

@Rule
public ActivityTestRule<ConsumerSettingsActivity> mActivityTestRule =
        new ActivityTestRule<>(ConsumerSettingsActivity.class);

@Before
public void initialize() {
    mConsumerSettingsActivity = mActivityTestRule.getActivity();
}

@Test
public void checkCorrectButtonsAreClickableInPhotoModeThenReturnToMainActivity() {

    // swipe to MainActivity and set behavior
    onView(allOf(withId(R.id.settings_top_bar), isDisplayed())).perform(swipeRight());
    onView(withId(R.id.mode_text)).perform(click());
    onView(withId(R.id.photo_mode)).perform(click());


    // test ratio Views
    onView(withId(R.id.ratio_full)).check(matches(isClickable()));
    onView(withId(R.id.ratio_full)).perform(click());
    onView(withId(R.id.ratio_square)).check(matches(isClickable()));
    onView(withId(R.id.ratio_square)).perform(click()); 
...
}
}

简短回答:MainActivity 被调用但未创建。

长答案:当ConsumerSettingsActivity调用滑动更改为MainActivity时,实际滑动调用finish()。由于未创建 MainActivity,因此抛出 NoActivityResumedException。为了解决这个问题,测试改为从 MainActivity 开始,然后滑动到 ConsumerSettingsActivity。另外,我不需要让线程休眠就可以在活动之间滑动。