带有片段的Android Espresso功能测试

Fil*_*mos 6 java android functional-testing android-fragments android-espresso

我的应用程序中有三个活动

  1. 登录活动
  2. 一项主要活动
  3. 细节活动

我想使用espresso来测试一系列事件:单击登录活动上的登录按钮,打开主活动,然后单击主活动中的列表项,打开详细活动,然后单击详细信息中的另一个按钮活动.我开始创建这个简单的测试,以获得对listview的引用:

public class LoginActivityTest extends ActivityInstrumentationTestCase2<LoginActivity> {

    public LoginActivityTest() {
        super(LoginActivity.class);
    }

    @Override
    public void setUp() throws Exception {
        super.setUp();

        getActivity();
    }

    public void testSequence() throws Exception {
        // Login
        onView(withId(R.id.button_log_in)).perform(click());

        // Check if MainActivity is loaded
        onView(withId(R.id.container)).check(matches(isDisplayed()));

        // Check if Fragment is loaded
        onView(withId(R.id.list)).check(matches(isDisplayed()));
    }
}
Run Code Online (Sandbox Code Playgroud)

mainActivity onCreate()方法中,我加载一个像这样的片段:

getFragmentManager().beginTransaction()
                .add(R.id.container, mListFragment)
                .commit();
Run Code Online (Sandbox Code Playgroud)

ListFragment片段有一个列表(R.id.list),但仍是测试失败了NoMatchingViewException:

android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with id: com.tests.android.development:id/list
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Ada*_*331 1

文档中的注释onView

注意:视图必须是视图层次结构的一部分。如果将其呈现为 AdapterView(例如 ListView)的一部分,则情况可能并非如此。如果是这种情况,请先使用 Espresso.onData 加载视图。

要用于onData加载视图,您需要检查 ListView 中适配器的实例。换句话说,如果您的列表视图使用 Cursor 适配器,您可以尝试以下操作:

onData(allOf(is(instanceOf(Cursor.class)))).check(matches(isDisplayed()));
Run Code Online (Sandbox Code Playgroud)

值得注意的是,只有当您的列表视图包含至少一项时,上述内容才会通过。最好在某个项目存在的情况下进行一次测试,在某个项目不存在的情况下进行一次测试。

有关如何检查确实存在的数据的更多信息,请参阅此处

有关如何检查适配器中不存在的数据的更多信息,请参阅此处