【问题标题】:Check number of rows using a MergeAdapter using Espresso使用 Espresso 使用 MergeAdapter 检查行数
【发布时间】:2015-12-17 19:24:15
【问题描述】:

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

我的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.

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

这是我的浓缩咖啡代码:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    正如你所说,测试实际上返回 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

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      • 2016-01-19
      • 1970-01-01
      相关资源
      最近更新 更多