测试看起来像那样(它是ActivityInstrumentationTestCase2):
public void testItShowsThreeRows() {
activity = getActivity();
activity.runOnUiThread(new Runnable() {
public void run() {
AccountsList accountsList = new AccountsList(activity, accounts);
list.show();
}
});
ListView listView = (ListView)activity.findViewById(R.id.list);
assertEquals(3, listView.getChildCount());
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试测试的代码.但测试失败,因为activity.runOnUiThread立即返回.我可以插入Thread.sleep,测试变成绿色,但对我来说看起来有点笨拙.我是否必须使用某些线程同步或者可能需要轮询某些UI元素才能准备好?
我试着用它注释,@UiThreadTest但这也不起作用.代码list.show()填充一个ListViewvia自定义适配器,并getView在另一个线程上调用(不是一个测试运行 - 我与之无关,我没有线程或asynctasks,没有任何东西).测试再次失败,因为它在UI准备好进行检查之前返回.
你必须做一个Thread.sleep。我认为没有办法解决这个问题。我不明白为什么这很“笨重”;你正在做一个测试,所以你必须等待系统显示你想要测试的UI元素。
不过,在我看来,您确实是在尝试测试 AccountsList 或列表。除非您偏执,否则没有理由测试 ListView 或 findViewById。
您应该专注于测试 AccountsList 和您的自定义适配器。您不必使用 UI 来执行此操作。
| 归档时间: |
|
| 查看次数: |
6398 次 |
| 最近记录: |