¿Cómo forzar un cambio de orientación en una prueba de instrumentación de Android?
Estoy escribiendo algunas pruebas de aceptación para una aplicación usando la clase ActivityInstrumentationTestCase2. Quiero causar un cambio de orientación desde dentro de la prueba para asegurar que ocurran varias cosas. Entre estas cosas están asegurando que el estado de actividad se conserva, pero también me gustaría asegurarme de que se use el diseño apropiado para la orientación.
Sé que puedo probar simplemente el onSaveInstanceState / onRestoreInstanceState / onPause / onResume / etc. Métodos para asegurar que el estado de la instancia se conserva. Sin embargo, me preguntaba si realmente hay un mecanismo para causar un cambio de orientación?
- Soluciones actuales para probar aplicaciones de Android
- Cómo detener una aplicación de Android desde la consola
- Prueba de GPS en Android
- Prueba de una biblioteca de Android con Robolectric
- Android: ¿Cómo puedo guardar, borrar y restaurar SharedPreferences para la prueba de unidades?
¿Esto implica la inyección de algún tipo de evento de movimiento para engañar al dispositivo / emulador en el pensamiento de que ha sido girado, o hay un método real para esto proporcionado por la instrumentación?
¡Gracias y Saludos!
- ApplicationTestCase obsoleto en el nivel 24 de API
- ¿Pruebas beta de Google Play sin una aplicación publicada?
- Carpeta de activos en Android Studio Unit Test
- Cómo inyectar el evento de clic con Android UiAutomation.injectInputEvent
- ClassNotFoundException durante el instrumento de prueba de Android
- Robolectric + rxJava + retrofit Segunda llamada lanza java.io.InterruptedIOException
- Java y la metodología de prueba de Android
- Java.lang.RuntimeException: ¡Stub! - ¿Cobertura de código de Android?
Usted realmente no tiene que usar Robotium para esto en absoluto. De hecho, si usted ve la fuente de Robotium todo lo que está haciendo cuando llama
solo.setActivityOrientation(Solo.LANDSCAPE);
es
myActivity = this.getActivity(); // In your setUp method() ... myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Como escribió AndrewKS puedes usar
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); assertTrue(...);
Para solicitar un cambio de orientación. Pero la rotación en sí se ejecuta de forma asíncrona. Para probar realmente el estado después del cambio de la orientación usted necesita esperar un poco tiempo después de la petición:
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); Thread.sleep(50); // depends on performance of the testing device/emulator assertTrue(...);
Utilice Robotium para ello. Hay una clase llamada Solo, con la que puedes cambiar la orientación simplemente llamando a un método:
solo.setActivityOrientation(Solo.LANDSCAPE);
¡Eso es! Su orientación se cambiaría. Usted puede google Robotium y obtener su tarro y añadirlo a su proyecto de prueba. El sitio de Robotium también ofrece un ejemplo de proyecto de prueba en la aplicación Notepad de Android (que está disponible como un proyecto de ejemplo con Android SDK) que muestra lo poderoso que es y la facilidad con que podría utilizarse.