При тестировании пользовательского интерфейса Android, как лучше всего дождаться готовности пользовательского интерфейса?

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

9
задан Art Shayderov 22 February 2012 в 19:24
поделиться