我有以下測試代碼。我試圖測試一個列表是否正從SQLite數據庫填充。使用ActivityInstrumentationTestCase2似乎無法測試ListView內容
public class ViewIssuesActivityTest extends BaseActivityTest<ViewIssuesActivity>{
private List<Issue> issues;
public ViewIssuesActivityTest() {
super(ViewIssuesActivity.class);
}
public void setUp() throws Exception {
super.setUp();
issues = new ArrayList<Issue>();
issues.add(new Issue("Trial","Desc","Location","ImagePath"));
IssueRepository issueRepository = mock(IssueRepository.class);
doAnswer(new Answer<Object>() {
@Override
public List<Issue> answer(InvocationOnMock invocation) throws Throwable {
return issues;
}
}).when(issueRepository).getIssues();
activity.setIssueRepository(issueRepository);
}
public void testNumberOfIssuesRecorded() {
ListView listView = (ListView) activity.findViewById(android.R.id.list);
assertEquals(1, listView.getCount());
}
}
我BaseActivityTest代碼:
public class BaseActivityTest<T extends Activity> extends ActivityInstrumentationTestCase2<T> {
protected T activity;
public BaseActivityTest(Class<T> activityClass) {
super(activityClass);
}
@Override
protected void setUp() throws Exception {
activity = getActivity();
}
}
我ViewIssuesActivity如下:
public class ViewIssuesActivity extends ListActivity{
private IssueRepository issueRepository;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(com.change.kranti.R.layout.issues);
issueRepository = new IssueRepository(getApplicationContext());
List<Issue> issues = new ArrayList<Issue>();
issues = issueRepository.getIssues();
ArrayAdapter<Issue> adapter = new ArrayAdapter<Issue>(this,
android.R.layout.simple_list_item_1, issues);
setListAdapter(adapter);
}
}
的問題是,我得到錯誤:預期< 1>得到< 0>
我認爲問題是onCreate方法在我之前被調用ssueRepository被創建。 我想嘲笑IssueRepository並測試我的列表正在填充。
我的代碼有什麼問題,或者有更好的方法來測試這個功能。
任何幫助將不勝感激。
謝謝您的回覆。 – Nazneen 2013-03-12 04:29:24
但我沒有同時運行兩個測試。我有一個與數據庫對話的issueRepository,ViewIssueActivity將數據從數據庫讀取到列表中。我需要測試這個功能。 – Nazneen 2013-03-12 04:59:52