Espresso:多次测试与一次用户旅程相比有哪些优点/缺点?

时间:2018-01-28 20:43:45

标签: java performance android-espresso

作为一个例子,我有一个带有MainActivity的应用程序,它有一个按钮和一个NextActivity,其中一个RecyclerView填充了垂直列表中的整数。我可以写下面单独的Espresso测试:

测试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()));
    }

}

一种方式比另一方好吗?通过一次用户旅程而不是多次单独测试,我会获得性能的显着提升吗?

1 个答案:

答案 0 :(得分:1)

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

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

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