2016-05-13 100 views
0

我正在为一个具有漫长动态项目列表的导航抽屉写Espresso测试。我想通过Text匹配navDrawer菜单项,而不是位置号。纵观谷歌的DataAdapterSample,我希望我可以用它来获取匹配:Espresso onData测试

@Test 
public void myTest() { 
    openDrawer(); 
    onRow("Sign In").check(matches(isCompletelyDisplayed())); 
} 

private static DataInteraction onRow(String str) { 
     return onData(hasEntry(equalTo("module_name"), is(str))); 
} 

我没有得到匹配。但在日志中我可以看到我在找什么。我得到

No data found matching: map containing ["module_name"->is "Sign In"] 
contained values: <[ 

Data: Row 0: {_id:"0", module_name:"Applications", module_secure:"false", headerCollapsible:1, } (class: android.database.MatrixCursor) token: 0, 
Data: Row 1: {_id:"1", module_name:"Sign In", module_lock:"false", module_right_text:null, } (class: android.database.MatrixCursor) token: 1, 
... 

回答

1

我认为hasEntry()仅适用于地图,并在我看来,在你的抽屉式导航项目不是旅游,而是MatrixCursors。

看到这个页面如何创建适配器视图http://droidtestlab.com/adapterView.html

定制匹配只需更换与MatrixCursor类的例子Person类。

例如是这样的:

private static DataInteraction onRow(final String str) { 
    return onData(new BoundedMatcher<Object, MatrixCursor>(MatrixCursor.class) { 
     @Override 
     public void describeTo(Description description) { 
     description.appendText("Matching to MatrixCursor"); 
     } 

     @Override 
     protected boolean matchesSafely(MatrixCursor cursor) { 
     return str.equals(cursor.getString(1)); 
     } 
    }); 
} 

在这里,我假设光标的第二列,我们需要匹配的文本。我假设这是基于“无数据发现匹配..”错误消息。

相关问题