Android и AndroidJUnit4. Как обработать и проверить неопределенную ошибку жизненного цикла
Ошибки, связанные с бесконечными циклами просмотра событий, являются темой этого вопроса. Такие петли не выбрасывают StackruError
потому что выполняются очень часто, но не рекурсивно. Примером этой ошибки кода может быть invalidate()
позвони внутрь onDraw
пользовательского просмотра.
По умолчанию AndroidJUnit4 ожидает простоя приложения после запуска тестового действия, а затем выполняет проверки. Но в случае бесконечного цикла жизненного цикла простоя не будет достигнуто, и тест завершится ошибкой java.lang.RuntimeException: Could not launch intent Intent within 45 seconds. Perhaps the main thread has not gone idle within a reasonable amount of time?
Такая ошибка не настолько декларативна, и тест должен ждать ее так долго.
Например, я должен проверить onLayoutChildren
метод LayoutManager
, По умолчанию при правильной реализации этот метод выполняется два или три раза после запуска, и все. И этот тест пройденverify(spy, atMost(3)).onLayoutChildren(any(RecyclerView.Recycler.class), any(RecyclerView.State.class))
, где spy
шпион LayoutManager
, Поведение может быть повреждено и onLayoutChildren
идет в бесконечный цикл. В случае ошибки при тестировании он зависает.
Что я пытаюсь достичь. Возможный вариант - запустить тестирование и приложение в течение некоторого времени (например, 500 мс или около того), затем сломать приложение и выполнить проверки после этого. Без какой-либо связи с простоями