使用 Espresso 使用 MergeAdapter 检查行数

Check number of rows using a MergeAdapter using Espresso

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

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

我已经找到这段代码来检查列表视图中 children 的数量:

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");
        }
    };
}

}

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

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

这是我的浓缩咖啡代码:

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

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

这里有一个 link 到 MergeAdapter:https://github.com/commonsguy/cwac-merge

如您所说,测试 returns 实际上是 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

希望对您有所帮助