Espresso:当我使用 espresso 单击某个项目时,我如何断言是否启动了特定的 activity

Espresso: How do i assert if a particular activity is launched when i click on a item using espresso

单击视图项后如何在 Espresso 中断言 activity?

onView(withId(com.example.android.notepad.R.id.XYZ)).perform(click());

在你的测试中你可能有这个:

@Rule
public ActivityTestRule<MyActivity> testRule = new ActivityTestRule<>(MyActivity.class);

那么您可以拨打:

testRule.getActivity()

获取Activity的实例。

刚才的电话

testRule.getActivity() instanceof MyActivity

您应该模拟单击按钮的过程,然后测试堆栈顶部的 activity 是否是您要查找的那个

@RunWith(AndroidJUnit4.class)
public class YourTestClass{


    @Test
    public void testButton() {
        Espresso.onView(ViewMatchers.withId(R.id.yourButtonId)).perform(ViewActions.click());

        Assert.assertEquals(getActivityInstance().getClass(), YourActivityThatShouldStart.class);
    }

    private Activity getActivityInstance() {
        final Activity[] currentActivity = {null};
        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
            public void run() {
                Collection resumedActivities = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED);
                if (resumedActivities.iterator().hasNext()) {
                    currentActivity[0] = (Activity) resumedActivities.iterator().next();
                }
            }
        });

        return currentActivity[0];
    }

}

testButton 函数中,有两行,第一行是点击你的按钮,第二行是检查结果 activity

Espresso 在主线程上工作,所以你很好