使用Espresso使用MergeAdapter检查行数

时间:2015-12-17 19:24:16

标签: android unit-testing android-testing android-espresso

我想编写一个单元测试来验证合并适配器中列出的用户数。

我的MergeAdapter列表视图有三个元素:

  • 包含一些按钮的标题
  • 适用于用户的适配器
  • 带有一些按钮的页脚。

我已经找到此代码来检查列表视图中的子项数:

class Matchers {
public static Matcher<View> withListSize (final int size) {
    return new TypeSafeMatcher<View>() {
        @Override public boolean matchesSafely (final View view) {
            return ((ListView) view).getChildCount () == size;
        }

        @Override public void describeTo (final Description description) {
            description.appendText ("ListView should have " + size + " items");
        }
    };
}

}

但它总是返回3,因为`ListView中有3个部分。

我只想查看包含用户列表的中间部分。

这是我的espresso代码:

onView (withId (android.R.id.list)).check (ViewAssertions.matches(Matchers.withListSize(2)));

它应该检查列表中是否有2个用户,但是这个检查失败了,因为它再次返回3(正如我之前说过的那些部分)。

这是指向MergeAdapter的链接:https://github.com/commonsguy/cwac-merge

1 个答案:

答案 0 :(得分:0)

正如你所说,测试实际返回3,因为它捕获了父视图,就像你说的三个部分一样。

您需要添加额外的匹配器才能获得第二个元素。

在Java库中查看Hamcrest匹配器参考: http://www.marcphilipp.de/downloads/posts/2013-01-02-hamcrest-quick-reference/Hamcrest-1.3.pdf

您可能需要使用withParentwithChildhasSiblinghasDescendant匹配器。所以在那之后,你的代码可能如下所示:

onView(withParent(withId(android.R.id.list))).check(ViewAssertions.matches(Matchers.withListSize(2)));

我不确定,但如果您已使用任何类型的适配器,则可以使用onData代替onView Espresso ViewMatcher

您可以在此处找到一些有用的信息:https://realm.io/news/chiu-ki-chan-advanced-android-espresso-testing

希望有所帮助