Как сохранить тесты, которые проверяют восстановление действий из пакета, в одном наборе тестов с другими тестами с помощью launchActivity

У меня есть набор тестов для приложения для Android, тестирующий несколько сценариев. Для большинства из них имеет смысл использовать launchActivity тестовой среды AndroidX.

У меня также есть в том же наборе тесты, которые проверяют восстановление действий из пакета. Эти тесты требуют, чтобы в параметрах разработчика был включен параметр "Не сохранять действия", так как только в этом случае легко настроить так, чтобы onCreate вызывал с ненулевым значением savedInstanceState.

Однако когда Don't keep activities в параметрах разработчика включен, launchActivity завершается с ошибкой IllegalStateException со следующей трассировкой стека:

java.lang.IllegalStateException: "Don't keep activities" developer options must be disabled for ActivityScenario
at androidx.test.internal.util.Checks.checkState(Checks.java:96)
at androidx.test.core.app.ActivityScenario.launchInternal(ActivityScenario.java:218)
at androidx.test.core.app.ActivityScenario.launch(ActivityScenario.java:190)
[...]

Мне интересно, почему существует такое ограничение и как с ним бороться? Поскольку это предотвращает сценарии тестирования при восстановлении активности из состояния экземпляра.

Даже если UiAutomator используется для этих конкретных тестовых случаев, проверяющих восстановление активности из состояния экземпляра, тесты не могут работать вместе на одном устройстве / эмуляторе, поскольку этот параметр является системной настройкой.

В качестве альтернативы можно включать и выключать настройку до и после тестов, однако это работает только на корневом устройстве, или нужно будет использовать UiAutomator для переключения переключателя настроек системы, что очень медленно.

1 ответ

Решение

Оказывается, воссоздание ActivityScenario охватывает этот конкретный сценарий:

Текущее Activity будет уничтожено после того, как его данные будут сохранены в Bundle с помощью onSaveInstanceState(Bundle), а затем будет создано новое Activity с сохраненным Bundle. После вызова этого метода гарантируется, что состояние Activity возвращается в то же состояние, что и его предыдущее состояние.

Другие вопросы по тегам