Тест выглядит так (это 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
вызывается в другом потоке (не тот, на котором выполняется тест - и я не имею к этому никакого отношения, у меня нет ни потоков, ни асинхронных задач, ни ничего) , Тест снова не пройден, поскольку он возвращается до того, как пользовательский интерфейс будет готов к проверке.