Intereting Posts
Значок Android не меняется Методы загрузки данных в Async для Android Обновление данных в RecyclerView и сохранение его положения прокрутки Не удается получить массив строк из XML Почему я получаю ошибку «sqlite3: not found» на внедренном Nexus One при попытке открыть базу данных с помощью оболочки adb? Многопоточный процесс Java (Android) Текст приложения Launcher – название приложения в двух строках Я получаю сообщение об ошибке "Показать метод (FragmentManager, String)" Получение года, месяца и даты в Android Как изменить программный цвет курсора Edittext в Android? Как предотвратить множественные экземпляры активности при ее запуске с разными намерениями Должен ли я использовать Maven для Android-приложения? Поле editText требуется, прежде чем переходить к другому действию Диалог на Android KitKat, похоже, вырезано Обновление прокрутки триггеров вместо раскрытия панели инструментов

Как вы принудительно изменяете ориентацию в тесте на Android Instrumentation?

Я пишу несколько приемочных тестов для приложения, используя класс ActivityInstrumentationTestCase2. Я хочу вызвать изменение ориентации из теста, чтобы убедиться, что произошло несколько вещей. Среди этих вещей – сохранение состояния Activity, но также я хотел бы убедиться, что используется соответствующий макет для ориентации.

Я знаю, что могу просто протестировать onSaveInstanceState / onRestoreInstanceState / onPause / onResume / etc. Чтобы убедиться, что состояние экземпляра сохранено. Однако мне было интересно, есть ли на самом деле механизм для возникновения события изменения ориентации?

Будет ли это связано с инъецированием какого-либо события движения, чтобы обмануть устройство / эмулятор, считая, что оно повернуто, или существует реальный метод для этого, предоставленный Инструментами?

Спасибо и приветствует!

Solutions Collecting From Web of "Как вы принудительно изменяете ориентацию в тесте на Android Instrumentation?"

На самом деле вам вообще не нужно использовать Robotium. Фактически, если вы просматриваете источник Robotium, все это делает, когда вы вызываете

solo.setActivityOrientation(Solo.LANDSCAPE); 

является

 myActivity = this.getActivity(); // In your setUp method() ... myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

Как писал AndrewKS, вы можете использовать

 getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); assertTrue(...); 

Запросить изменение ориентации. Но само вращение выполняется асинхронно. Чтобы действительно проверить состояние после изменения ориентации, вам нужно подождать короткое время после запроса:

 getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); Thread.sleep(50); // depends on performance of the testing device/emulator assertTrue(...); 

Используйте Robotium для этого. Существует класс под названием Solo, с помощью которого вы можете изменить ориентацию, просто вызвав метод:

 solo.setActivityOrientation(Solo.LANDSCAPE); 

Это оно! Ваша ориентация изменится. Вы можете Google Robotium и получить свою банку и добавить ее в свой тестовый проект. Сайт Robotium также дает пример тестового проекта в приложении Notepad от Android (который доступен в качестве примера проекта с Android SDK), который показывает, насколько он силен и насколько легко он может быть использован.