Как заставить принудительно изменить ориентацию в тесте Android Instrumentation? - PullRequest
24 голосов
/ 18 августа 2010

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

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

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

Спасибо и ура!

Ответы [ 3 ]

48 голосов
/ 01 июня 2011

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

solo.setActivityOrientation(Solo.LANDSCAPE);

, это

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

...

myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
5 голосов
/ 18 ноября 2011

Как писал 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(...);
3 голосов
/ 30 декабря 2010

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

solo.setActivityOrientation(Solo.LANDSCAPE);

Вот и все!Ваша ориентация изменится.Вы можете зайти в Robotium и получить его jar-файл и добавить его в свой тестовый проект.На сайте Robotium также приведен пример тестового проекта в Android Notepad App (который доступен как пример проекта с Android SDK), который показывает, насколько он мощный и насколько легко его можно использовать.

...