Я использую Robolectric 3.0 (ToT).robolectric: Handler.postDelayed запускается немедленно
В моей деятельности в onCreate
я сделать следующий вызов:
mHandler.postDelayed(mRunnable, 10 * 60 * 1000)
Тогда в моем Robolectric тест случае установки I активность и исполняемым немедленно начал (и как это происходит, это вызывает finish()
). Как я могу предотвратить это?
Я использовал ShadowLooper.pauseMainLooper();
, который предотвращает обстрел Runnable
, но это нехорошее решение для меня. Я отправляю трансляции в тесте, и они не получаются, когда основной петлитель приостановлен. Когда я его приостанавливаю, оба намерения доставляются к широковещательному приемнику и запускается Runnable
. Как я могу получить широковещательный приемник для запуска, но не задерживаетсяRunnable
.
Я смог воспроизвести одну и ту же проблему с 'robolectric 2.4'. Я бы создал билет на трекер Robolectric (я вижу, вы уже это сделали) и понять их проблему. Может быть, как ожидалось. В качестве обходного пути я бы создал и прокси-класс для планирования событий с delaed и издевательства над ним в тесте. Нехорошо писать дополнительные функции для прохождения теста, но он должен работать –
Я подал билет: https://github.com/robolectric/robolectric/issues/1509 – gruszczy
Эта проблема, похоже, находится в собственном планировщике Android; Я обнаружил, что Handler.postDelayed (foo, 1000) срабатывает примерно через 200 мс, по крайней мере, на Android 4.2. – fluffy