Заявка: В методе launch(Intent startActivityIntent)
API ActivityScenario есть ограничение.Он ожидает, когда активность будет Lifecycle.STATE.RESUMED
или DESTROYED
, и если это не произойдет в течение 4,5 секунд, он выдаст эту ошибку.
Контекст: Мое приложение использует IndexActivity
загрузить конфигурацию, которая инструктирует приложение на определенные вызовы API, чтобы сделать.Однако сразу после загрузки DialogActivity
и IndexActivity
переходит в STOPPED
.При принятии условий в DialogActivity
IndexActivity
возвращается в RESUMED
, и затем ActivityScenario работает правильно.С моими тестами было условие гонки на то, может ли Espresso щелкнуть по терминам в течение 4,5 секунд, чтобы получить IndexActivity
равным RESUMED
, или эта ошибка будет выдана до этого.Потребуется серьезный рефакторинг, чтобы разрешить запуск другого действия с ActivityScenario, чтобы это было невозможно.
Исправление В public static <A extends Activity> ActivityScenario<A> launch(Intent startActivityIntent)
сценария активности, проверьте логику scenario.waitForActivityToBecomeAnyOf(State.RESUMED, State.DESTROYED);
Если вы можете создать свой собственный сценарий активности и настроить эту строку кода на что-то вроде scenario.waitForActivityToBecomeAnyOf(State.STOPPED, State.DESTROYED);
, то это теоретически будет работать для вас.Затем вы можете снова использовать ActivityScenario, чтобы перевести Activity в любое желаемое состояние жизненного цикла.
ИЛИ просто используйте старый https://developer.android.com/reference/androidx/test/rule/ActivityTestRule, пока Google не решит эту проблему в тесте AndroidX.
TL; DR Это происходит потому, что в Lifecycle.State вашей активности нет ни одного из двух состояний жизненного цикла, ожидаемых ActivityScenario.Launch()
, RESUMED
или DESTROYED
.Вероятно, ваша деятельность связана с диалогом или другой ситуацией, о которой не задумывались при создании API.