2011-11-25 71 views
2

我该如何测试robotium的listview?我只是想检查一下是否有物品进入它的事件。robotium,如何测试listview

我的活动有一个方法:

private void initListView() { 
    Adapter adapter = 
      new Adapter(this, myRepository.findAll()); 
    listView.setAdapter(adapter); 
} 

MyRepository返回列表。在ActivityInstrumentationTestCase2中,我想将一些项目放到respository中,然后测试listView是否包含元素。

public void testListView_IsNotEmpty() { 
    Item i = new Item(); 
    i.setSomething("item1"); 
    getActivity().getMyRepository().insert(i); 
    assertTrue(solo.searchText("item1")); 
} 

它是通过robotium做到的吗?

最好的问候

+0

您可以访问存储库__before__您的通话getActivity('测试用例')?只需添加文本,您的活动将不会被创建,直到您实际调用getActivity()。否则,在你的适配器中注册一个'DataSetObserver',并在你处理你的仓库时调用它。 – Jens

+0

thx寻求帮助,但我无法在活动之前加载数据 – reizals

回答

1

这是嘲笑框架的明确情况。我推荐jMockit,因为它是最先进的,适用于对付stubbed的android库。当你不喜欢测试由Android本身(你隐含信任他们做正确的事)提供的类,你只需要测试:

  • 您repositry被要求值列表
  • 这个值列表是用于创建一个适配器
  • 该适配器被传递到列表视图

测试情况是这样的:

@Test 
public void testThatListInitializedProperly(@Mocked final ListView listView, 
              @Mocked final YourRepository repository, 
              @Mocked(methods = {"initListView"}, inverse=true) final YourActivity activity, 
              @Mocked final Adapter adapter 
) { 
    new Expectations() { 
     { 
       repository.findAll(); returns(someList); 

       new Adapter(activity, someList); returns(adapter); 

       listView.setAdapter(adapter); 

     } 
    }; 

    activity.initListView(listView); 

}

(请注意,我调整了接口,方便mockability)