2015-11-30 3 views
0

Я работаю над тестовыми примерами для приложений для Android. Я использую Espresso для автоматического тестирования ui. В одном из моих действий я использую Array Adapter для управления ListView. В частности, он работает со списком объектов JSON. В Espresso я пытаюсь сопоставить определенный элемент списка с помощью метода OnData.Тестирование эспрессо с объектами JSON

onData(allOf(is(instanceOf(JSONObject.class)), hasEntry(equalTo("title"), is("FIU-MMC Blood Drive")))) 
      .inAdapterView(withId(R.id.homeListViewList)).check(matches(isDisplayed())); 

Сброс тестового случая, поскольку он не может найти соответствующий элемент. Тем не менее, трассировки стека четко показывает элемент, который я пытаюсь найти с «название» в качестве ключа и «СФР-MMC Drive Blood» в качестве значения:

Caused by: java.lang.RuntimeException: No data found matching: (is an instance of org.json.JSONObject and map containing ["title"->is "FIU-MMC Blood Drive"]) contained values: <[Data: {"bloodDriveId":1,"title":"FIU-MMC Blood Drive","description":"We need blood due to the high frequency of accidents in the area.","startTime":"2015-09-23","endTime":"2015-12-23","address":"1234 FIU Way"} (class: org.json.JSONObject) token: 0 ... 

Я понятия не имею, почему он говорит, что он не может его найти. У кого-нибудь есть идеи?

ответ

0

Будет ли это работать?

onData(new BoundedMatcher<Object, JSONObject>(JSONObject.class) { 
    @Override 
    public void describeTo(Description description) { 
     description.appendText("Matching to JSONObject"); 
    } 

    @Override 
     protected boolean matchesSafely(JSONObject jsonObject) { 
     try { 
      return "FIU-MMC Blood Drive".equals(jsonObject.getString("title")); 
     } catch (JSONException e) { 
      return false; 
     } 
    } }).inAdapterView(withId(R.id.homeListViewList)).check(matches(isDisplayed())); 
Смежные вопросы