Espresso onData测试

时间:2016-05-13 14:49:53

标签: android android-espresso

我正在为导航抽屉编写Espresso测试,导航抽屉有一个长而动态的条目列表。我想通过Text匹配navDrawer菜单项而不是位置编号。看看谷歌的DataAdapterSample,我希望我能用它来获得一场比赛:

@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 个答案:

答案 0 :(得分:1)

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

只需将示例中的Person类替换为MatrixCursor类。

例如:

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

这里我假设游标的第二列包含我们需要匹配的文本。我假设这是基于&#34;没有找到匹配的数据..&#34;错误信息。