Тест выглядит так (это 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());
}
Код, который я пытаюсь проверить, работает. Но тест не проходит, потому что activity.runOnUiThread
возвращается немедленно. Я могу вставить Thread.sleep
, и тест станет зеленым, но мне это кажется немного неуклюжим. Нужно ли мне использовать синхронизацию потоков или, возможно, опрос для некоторых Элемент пользовательского интерфейса должен быть готов?
Я попытался аннотировать его с помощью @UiThreadTest
, но это тоже не сработало. Код в list.show ()
заполняет ListView
через настраиваемый адаптер, а getView
вызывается в другом потоке (не тот тест, на котором выполняется - и я не имею к этому никакого отношения, у меня нет потоков или asynctasks, ничего). снова не работает, потому что он возвращается до того, как пользовательский интерфейс будет готов для проверки.