Espresso:与一个用户旅程相比,进行多个测试的优点/缺点是什么



例如,我有一个应用程序,其中包含一个具有按钮的MainActivity和一个NextActivity,该应用程序具有一个由垂直列表中的整数填充的RecyclerView。我可以编写以下单独的浓缩咖啡测试:

测试 1:

public class MainScreenTest {
    @Rule
    public IntentsTestRule<MainActivity> mainActivityRule =
            new IntentsTestRule<>(MainActivity.class);
    @Test
    public void shouldOpenNextActivityOnClick() {
        onView(withId(R.id.btn)).check(matches(withText("foo")));
        onView(withId(R.id.btn))
                .perform(click());
        intended(hasComponent("com.example.androidplayground.NextActivity"));
    }
}

测试 2:

public class NextScreenTest {
    @Rule
    public ActivityTestRule<NextActivity> nextActivityRule =
            new ActivityTestRule<>(NextActivity.class);
    @Test
    public void shouldScrollToItem() throws Exception {
        int position = 15;
        onView(withId(R.id.rv))
                .perform(RecyclerViewActions.scrollToPosition(position));
        onView(withText(position)).check(matches(isDisplayed()));
    }
}

或者,我可以编写一个涵盖两者的测试:

public class UserJourneyTest {
    @Rule
    public ActivityTestRule<MainActivity> mainActivityRule =
            new ActivityTestRule<MainActivity>(MainActivity.class);
    @Test
    public void userJourney() {
        onView(withId(R.id.btn)).check(matches(withText("foo")));
        onView(withId(R.id.btn))
                .perform(click());
        int position = 15;
        onView(withId(R.id.rv))
                .perform(RecyclerViewActions.scrollToPosition(position));
        onView(withText(position)).check(matches(isDisplayed()));
    }
}

一种方式比另一种方式好吗?我是否会通过一个用户旅程而不是多个单独的测试来显著提高性能?

我的观点是,如果你通过单击一个按钮从MainActivity导航到NextActivity,你不会想要编写一个直接启动NextActivity的测试。当然,浓缩咖啡允许这样做,但如果从 MainActivity 有一些数据传递给 NextActivity,如果你的测试直接启动 NextActivity,你就不会拥有它们。

我想说的是,首先通过编写UI自动化测试,您希望模拟用户的行为。所以我会选择你上面发布的第三个选项,UserJourneyTest.class

在您的情况下,这不是性能问题,而是正确测试的问题。

最新更新