【问题标题】:Test Case for Listview Item in FragmentFragment中Listview项的测试用例
【发布时间】:2016-08-18 10:27:30
【问题描述】:

我有一个 Activity.java,其中包含一些选项卡。每个选项卡代表不同的片段。一个名为 Menu 的选项卡有一个 listview,其中的 items 是从 API 调用中获取的。

现在,如何为列表视图上的项目编写测试用例?

我尝试了下面的代码:

onData(withId(R.id.navigation_menu)).check(matches(withText(R.string.log_out))) .perform(click());

这里,navigation_menu 是列表名称,log_out 是项目字符串的名称。但后来我收到以下错误:

android.support.test.espresso.NoMatchingViewException:层次结构中找不到匹配的视图

层次结构是:

HomeActivity.java --> TabAdapter.java --> MenuFragment.java --> MenuListAdapter.java

那么,listviewitem 的测试用例应该是什么,它位于 activity ?请帮助!!

【问题讨论】:

    标签: android listview android-fragments runtime-error testcase


    【解决方案1】:

    navigation_menu 必须是与 onData() 一起使用的可滚动视图类型,并且所有视图都必须在屏幕上可见(如果您的屏幕很小并且您必须滚动才能看到该视图 --> 这也意味着不可见。

    如果 navigation_menu 已经是一种 Scrollable 视图。如果它隐藏在屏幕上,您可以调用其他方法。示例:

     onData(withId(R.id.navigation_menu)).perform(scrollTo()).check(...)
    

    【讨论】:

    • 谢谢,但 navigation_menu 已经是可滚动的视图。我想我被卡住了,因为我不明白如何链接层次结构(从活动到 navigation_menu_items)。
    • 所以在调用 check() 方法之前添加 perform(scrollTo()
    【解决方案2】:

    我有一段时间没有在 Android 中编写代码了,所以请耐心等待。 你为什么指的是字符串而不是项目本身?

    你应该引用项目本身的 id 而不是它的字符串

     public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();
    
        if (id == R.id.nav_log_in) {
            Log.i(PRESS_TAG, "lOG IN");
            callLogInActivity(mainView);
    
        } else if (id == R.id.nav_settings) {
            Log.i(PRESS_TAG, " Settings");
            callSettingsActivity(mainView);}
        return true;
    }
    

    Xml

       <item
                android:id="@+id/nav_settings"
                android:icon="@drawable/ic_menu_manage"
                android:title="@string/nav_settings_title" />
    

    【讨论】:

    • 我是新手,所以我对许多主题仍然缺乏经验。我正在另一个 java 类中编写测试用例,而不是在 Fragment 中。 (对不起,应该提到这一点)。因此,调用 onNavigationItemSelected 是不可能的。
    • 好的,我想我现在更好地理解了你的问题。您是否尝试使用从 API 获取的项目来填充您的菜单?还是您要注销?以下是在 Android 中引用不同对象的方法:link 另见:[链接] (stackoverflow.com/questions/1983548/…)
    • 我用获取的项目填满了我的菜单,其中包括“注销”。 &然后我尝试单击“注销”以进行测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 2014-07-27
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多