24

Estoy escribiendo algunas pruebas de aceptación para una aplicación que utiliza la clase ActivityInstrumentationTestCase2. Quiero provocar un cambio de orientación dentro de la prueba para garantizar que sucedan varias cosas. Entre estas cosas está asegurar que se preserve el estado de la Actividad, pero también me gustaría asegurarme de que se use el diseño apropiado para la orientación.¿Cómo fuerza un cambio de orientación en una prueba de instrumentación de Android?

Sé que puedo simplemente probar onSaveInstanceState/onRestoreInstanceState/onPause/onResume/etc. métodos para asegurarse de que el estado de la instancia se preserve. Sin embargo, me preguntaba si realmente hay un mecanismo para causar un evento de cambio de orientación.

¿Esto implicaría inyectar algún tipo de evento de movimiento para engañar al dispositivo/emulador y hacerle pensar que ha sido rotado, o hay un método real para esto provisto por la Instrumentación?

Gracias & ¡Salud!

Respuesta

46

En realidad, no tiene que usar Robotium para esto. De hecho, si ve la fuente de todo lo que está haciendo Robotium cuando llame

solo.setActivityOrientation(Solo.LANDSCAPE); 

es

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

... 

myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
+0

impresionante, cambió la respuesta aceptada a la tuya. Los Kudo para el trabajo de detective van a ti, señor. – plainjimbo

+0

Robotium parece más corto para esto. –

+6

Y probablemente sea necesario llamar a 'getInstrumentation(). WaitForIdleSync();' después de eso para esperar a que ocurra el cambio de orientación porque se realiza de manera asíncrona. – Ognyan

3

Use Robotium para él. Hay una clase llamada Solo, con el que se puede cambiar la orientación con sólo llamar a un método:

solo.setActivityOrientation(Solo.LANDSCAPE); 

eso es todo! Su orientación cambiaría. Puede buscar en Google Robotium, obtener su jar y agregarlo a su proyecto de prueba. El sitio de Robotium también ofrece un ejemplo de proyecto de prueba en la aplicación Bloc de notas de Android (que está disponible como un proyecto de muestra con Android SDK) que muestra qué tan potente es y qué tan fácil se puede usar.

+0

Wow, gracias! Ha pasado un tiempo desde que hice la pregunta y ha visto muchos puntos de vista. Esto definitivamente resuelve el problema que tuve. Robotium parece una gran biblioteca de pruebas. – plainjimbo

+0

Sí James, ¡seguro que sí! :) –

+0

Para bad Robotium no admite fragmentos. – Martin

5

Como AndrewKS escribieron puede utilizar

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

para solicitar un cambio de orientación . Pero la rotación en sí misma se ejecuta de forma asíncrona. Realmente para probar el estado después del cambio de orientación es necesario esperar un tiempo corto después de la solicitud:

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