Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 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), который показывает, насколько он силен и насколько легко он может быть использован.