我想编写一个单元测试来验证合并适配器中列出的用户数。
我的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
答案 0 :(得分:0)
正如你所说,测试实际返回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
希望有所帮助