使用 Espresso 使用 MergeAdapter 检查行数
Check number of rows using a MergeAdapter using Espresso
我想编写一个单元测试来验证合并适配器中列出的用户数。
我的 MergeAdapter
列表视图包含三个元素:
- a header 带有一些按钮,
- 用户适配器,
- 带有一些按钮的页脚。
我已经找到这段代码来检查列表视图中 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
您可能需要使用 withParent
、withChild
、hasSibling
、hasDescendant
匹配器。所以在那之后,您的代码可能如下所示:
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
希望对您有所帮助
我想编写一个单元测试来验证合并适配器中列出的用户数。
我的 MergeAdapter
列表视图包含三个元素:
- a header 带有一些按钮,
- 用户适配器,
- 带有一些按钮的页脚。
我已经找到这段代码来检查列表视图中 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
您可能需要使用 withParent
、withChild
、hasSibling
、hasDescendant
匹配器。所以在那之后,您的代码可能如下所示:
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
希望对您有所帮助