Как вы изменяете ориентацию в тесте на Android Instrumentation?
Я пишу несколько приемочных тестов для приложения, используя класс ActivityInstrumentationTestCase2. Я хочу вызвать изменение ориентации из теста, чтобы убедиться, что произошло несколько вещей. Среди этих вещей - сохранение состояния активности, но также я хотел бы убедиться, что используется соответствующий макет для ориентации.
Я знаю, что могу просто протестировать onSaveInstanceState/onRestoreInstanceState/onPause/onResume/etc. чтобы убедиться, что состояние экземпляра сохранено. Однако мне было интересно, есть ли на самом деле механизм для возникновения события изменения ориентации?
Будет ли это связано с инъецированием какого-либо события движения, чтобы обмануть устройство/эмулятор, считая, что оно было повернуто или существует реальный метод для этого, предоставленный Инструментами?
Спасибо и приветствия!
Ответы
Ответ 1
На самом деле вам вообще не нужно использовать Robotium. Фактически, если вы просматриваете источник Robotium, все это происходит, когда вы вызываете
solo.setActivityOrientation(Solo.LANDSCAPE);
является
myActivity = this.getActivity(); // In your setUp method()
...
myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Ответ 2
Как пишет 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
Используйте Robotium для этого.
Существует класс Solo, с помощью которого вы можете изменить ориентацию, просто вызвав метод:
solo.setActivityOrientation(Solo.LANDSCAPE);
Что это! Ваша ориентация изменится.
Вы можете google Robotium и получить свою банку и добавить ее в свой тестовый проект. Сайт Robotium также дает пример тестового проекта в Android Notepad App (который доступен в качестве образца проекта с Android SDK), который показывает, насколько он силен и насколько легко он может быть использован.