Эспрессо не запускается Активность та же для второй итерации в параметризованном тесте
Есть ли что-то другое в том, как Espresso запускает тесты после первого при использовании параметризованных тестов?
У меня есть два параметра, и они оба работают отлично, если я делаю их самостоятельно (если я закомментирую один из них и у меня только один параметр), или если я изменяю порядок, в котором всегда проходит первый.
Но почему-то, когда я запускаю их вместе, второй всегда терпит неудачу. На самом деле, однажды это не подвело. Ничего не меняя, это сработало один раз. Но только один раз. Так что возможно, возможно, есть ошибка, но я склонен думать, что это то, что я делаю (или не делаю).
Фактическая проблема, которая возникает, состоит в том, что поле устанавливается равным нулю в середине теста (согласно отладчику). Но я не могу понять, как и почему, тем более, что это не происходит в первом тесте. Так что я не могу найти ничего очевидного в коде, который делает это, но я также не вижу, что отличается с Espresso. Есть идеи?
Я следовал за отладчиком, где он доказал мне, что значение установлено, и затем по какой-то причине, когда он приостанавливает текущую активность для запуска диалога, значение устанавливается равным нулю. Но только на втором тесте. В такой же ситуации в первом тесте это не так. Зачем?
Редактировать: Хорошо, я сузил это дальше, но все еще не уверен, почему он это делает. Это немного странно, но я обнаружил через отладчик, что onDetach в первом тесте вызывается после onResume для второго теста. Почему это может быть?
В любом случае, именно поэтому у меня возникла проблема, так как код, который устанавливает значение NULL, происходит из onDetach, а значение изначально устанавливается из метода в onResume. Так что это объясняет. Но почему это происходит?
Проблема зарегистрирована здесь: https://code.google.com/p/android/issues/detail?id=235247
1 ответ
Хорошо, я нашел решение. Поскольку onDestroy из предыдущего теста вызывается после onResume в текущем тесте, я переместил код в onDestroy, который очищает мои слушатели, в начало onResume. Теперь, когда другой код в onResume выполняется, он не обнуляется из-за неправильного выбора времени onDestroy. Доступ к слушателям осуществляется через репозиторий, который остается активным все время.
Надеюсь, что все это имеет смысл для тех, кто читает, если они сталкиваются с подобной проблемой. До сих пор я не заметил никаких побочных эффектов этого обходного пути. Все тесты пройдены, и само приложение также работает при запуске вручную.
Изменить: этот обходной путь теперь вызывает проблемы, поэтому я должен принять свой ответ. Причина в том, что когда я вызываю другую активность для результата, когда он возвращается, слушатели убиваются в onResume. В этом случае onDestroy еще не убит, поэтому не вызовет этой проблемы.
Правка 2 и текущее решение: этот вопрос было немного сложно проверить читателям, поэтому я создал тестовое приложение и новый, более простой вопрос. С тех пор я нашел рабочее решение, которое я объяснил в этом посте: эспрессо не ждет, пока активность не будет уничтожена, прежде чем создавать новое для следующего теста
Основываясь на чтении некоторых вопросов и ответов в Meta, я считаю, что SO предпочитает, чтобы вопросы не удалялись, поэтому я просто оставлю этот вопрос здесь.