24

Ich schreibe einige Akzeptanztests für eine Anwendung mit der ActivityInstrumentationTestCase2-Klasse. Ich möchte eine Orientierungsänderung innerhalb des Tests bewirken, um sicherzustellen, dass eine Anzahl von Dingen passiert. Zu diesen Dingen gehört es, sicherzustellen, dass der Aktivitätsstatus erhalten bleibt, aber ich möchte auch sicherstellen, dass das geeignete Layout für die Ausrichtung verwendet wird.Wie erzwingen Sie eine Orientierungsänderung in einem Android Instrumentation-Test?

Ich weiß, dass ich onSaveInstanceState/onRestoreInstanceState/onPause/onResume/etc einfach testen kann. Methoden, um sicherzustellen, dass der Status der Instanz erhalten bleibt. Ich habe mich jedoch gefragt, ob es tatsächlich einen Mechanismus gibt, der ein Ereignis der Orientierungsänderung verursacht?

Würde dies eine Art Bewegungsereignis einbringen, um das Gerät/den Emulator dazu zu bringen zu denken, dass es gedreht wurde, oder gibt es eine tatsächliche Methode dafür, die von der Instrumentation bereitgestellt wird?

Danke & Prost!

Antwort

46

Sie müssen eigentlich nicht wirklich Robotium dafür verwenden. In der Tat, wenn Sie die Quelle von Robotium sehen alle, es zu tun, wenn rufen Sie

solo.setActivityOrientation(Solo.LANDSCAPE); 

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

... 

myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
+0

genial, wechselte die akzeptierte Antwort zu Ihrem. Kudo's für die Detektivarbeit geht an Sie, Sir. – plainjimbo

+0

Roboter scheint dafür kürzer. –

+6

Und wahrscheinlich muss man 'getInstrumentation(). WaitForIdleSync();' danach aufrufen, um auf die Änderung der Ausrichtung zu warten, weil sie asynchron ausgeführt wird. – Ognyan

3

Verwenden Sie Robotium dafür. Es gibt eine Klasse namens Solo, mit dem Sie Orientierung ändern können, indem nur eine Methode aufrufen:

solo.setActivityOrientation(Solo.LANDSCAPE); 

Das ist es! Deine Orientierung würde sich ändern. Sie können Robotium googlen und sein Glas erhalten und es Ihrem Testprojekt hinzufügen. Die Robotium-Site gibt auch ein Beispiel Testprojekt auf Androids Notepad App (das als Beispielprojekt mit Android SDK verfügbar ist), das zeigt, wie leistungsfähig es ist und wie leicht es verwendet werden kann.

+0

Wow, danke! Es ist eine Weile her, seit ich die Frage gestellt habe und viele Ansichten gesehen habe. Dies löst definitiv das Problem, das ich hatte. Robotium sieht aus wie eine großartige Testbibliothek. – plainjimbo

+0

Ja James, ist es sicher! :) –

+0

To bad Robotium unterstützt keine Fragmente. – Martin

5

ist als AndrewKS schrieb Sie

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

aufzufordern, eine Orientierungsänderung verwenden können . Aber die Rotation selbst wird asynchron ausgeführt. Um wirklich den Staat testen nach die Ausrichtung ändern Sie eine kurze Zeit nach der Anfrage warten müssen:

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