Android 安卓浓咖啡onData搭配doesNotExist
我正在尝试验证Android 安卓浓咖啡onData搭配doesNotExist,android,android-espresso,Android,Android Espresso,我正在尝试验证列表视图是否不包含特定项。以下是我使用的代码: onData(allOf(is(instanceOf(Contact.class)), is(withContactItemName(is("TestName"))))) .check(doesNotExist()); 当名称存在时,我正确地得到一个错误,因为检查(doesNotExist())。当名称不存在时,我得到以下错误,因为allOf(…)与任何内容都不匹配: Caused by: java.lang.Runti
列表视图
是否不包含特定项。以下是我使用的代码:
onData(allOf(is(instanceOf(Contact.class)), is(withContactItemName(is("TestName")))))
.check(doesNotExist());
当名称存在时,我正确地得到一个错误,因为检查(doesNotExist())
。当名称不存在时,我得到以下错误,因为allOf(…)
与任何内容都不匹配:
Caused by: java.lang.RuntimeException: No data found matching:
(is an instance of layer.sdk.contacts.Contact and is with contact item name:
is "TestName")
我如何获得像onData(…).check(doesNotExist())这样的功能
编辑:
通过使用try/catch并检查事件的getCause(),我遇到了一个可怕的问题,无法获得我想要的功能。我想用一种好的技术来代替它。根据浓缩咖啡样本,您不能使用
onData(…)
来检查适配器中是否不存在视图。看看这个-。阅读“断言数据项不在适配器中”部分。您必须将匹配器与查找AdapterView的onView()
一起使用
基于以上链接中的浓缩咖啡样品:
private static Matcher<View> withAdaptedData(final Matcher<Object> dataMatcher) {
return new TypeSafeMatcher<View>() {
@Override
public void describeTo(Description description) {
description.appendText("with class name: ");
dataMatcher.describeTo(description);
}
@Override
public boolean matchesSafely(View view) {
if (!(view instanceof AdapterView)) {
return false;
}
@SuppressWarnings("rawtypes")
Adapter adapter = ((AdapterView) view).getAdapter();
for (int i = 0; i < adapter.getCount(); i++) {
if (dataMatcher.matches(adapter.getItem(i))) {
return true;
}
}
return false;
}
};
}
is(使用ContactItemName(is(“TestName”))
在匹配程序中添加以下代码:
public static Matcher<Object> withContactItemName(String itemText) {
checkArgument( itemText != null );
return withContactItemName(equalTo(itemText));
}
带有ContactItemName(String itemText)的公共静态匹配器{
checkArgument(itemText!=null);
返回ContactItemName(equalTo(itemText));
}
然后您将拥有更可读、更清晰的代码is(带有ContactItemName(“TestName”)
public static Matcher<Object> withContactItemName(String itemText) {
checkArgument( itemText != null );
return withContactItemName(equalTo(itemText));
}