24

J'écris des tests d'acceptation pour une application utilisant la classe ActivityInstrumentationTestCase2. Je veux provoquer un changement d'orientation à l'intérieur du test pour m'assurer qu'un certain nombre de choses se produisent. Parmi ces choses sont de s'assurer que l'état d'activité est préservée, mais aussi je voudrais m'assurer que la disposition appropriée pour l'orientation est utilisée. Je sais que je peux simplement tester onSaveInstanceState/onRestoreInstanceState/onPause/onResume/etc. méthodes pour s'assurer que l'état de l'instance est préservé. Cependant, je me demandais s'il existe réellement un mécanisme pour provoquer un événement de changement d'orientation? Est-ce que cela impliquerait l'injection d'une sorte d'événement de mouvement pour tromper l'appareil/l'émulateur en lui faisant croire qu'il a été tourné ou y a-t-il une méthode réelle fournie par l'instrumentation?Comment forcer un changement d'orientation dans un test Android Instrumentation?

Merci & À la votre!

Répondre

46

Il n'est pas vraiment nécessaire d'utiliser Robotium pour cela. En fait, si vous affichez la source de Robotium tout ce qu'il fait lorsque vous appelez

solo.setActivityOrientation(Solo.LANDSCAPE); 

est

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

... 

myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
+0

génial, commuté la réponse acceptée à la vôtre. Kudo pour le travail de détective vont à vous monsieur. – plainjimbo

+0

Robotium semble plus court pour cela. –

+6

Et probablement il faudra appeler 'getInstrumentation(). WaitForIdleSync();' après cela afin d'attendre que le changement d'orientation se produise car il est effectué de manière asynchrone. – Ognyan

3

Utilisez Robotium pour cela. Il y a une classe appelée Solo, l'aide que vous pouvez changer d'orientation en appelant simplement une méthode:

solo.setActivityOrientation(Solo.LANDSCAPE); 

Ca y est! Votre orientation va changer. Vous pouvez google Robotium et obtenir son pot et l'ajouter à votre projet de test. Le site Robotium propose également un exemple de projet Test sur l'application Notepad d'Android (disponible en tant que projet exemple avec Android SDK) qui montre à quel point il est puissant et facile à utiliser.

+0

Wow, merci! Cela fait un moment que j'ai posé la question et vu beaucoup de points de vue. Cela résout définitivement le problème que j'avais. Robotium ressemble à une excellente bibliothèque de tests. – plainjimbo

+0

Oui James, c'est sûr! :) –

+0

Au mauvais Robotium ne supporte pas les fragments. – Martin

5

Comme AndrewKS écrit vous pouvez utiliser

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

pour demander un changement d'orientation . Mais la rotation elle-même est exécutée de manière asynchrone. Pour vraiment tester l'état après le changement d'orientation que vous devez attendre un peu de temps après la demande:

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