Wie erzwingen Sie die Konfiguration ändern in einem Android-Robolectric test?
Ich bin mit robolectric, um mein android unit tests schnell genug, um nützlich zu sein. Ich will zu testen, ob der code, den ich geschrieben habe, funktioniert zwar der Bildschirm, Orientierung ändern, um zu simulieren eine gemeinsame realen Fall.
Konkret, was ich Teste ist eine asynchrone http-Aufruf an einen server mit einigen xml geparst wird, nachdem das Ergebnis abgeholt werden. Ich habe den unit-test für alle, die toll arbeiten, aber kann nicht herausfinden, wie simulieren Sie die Bildschirm-rotation. Jede Zustandsänderung, die bewirkt, dass die Aktivität neu an sich ist in Ordnung, es muss nicht unbedingt sein, Bildschirm-rotation.
Einer Lösung, verwendet der emulator ist keine option, da ich meine tests mehrere Male pro minute und Sie müssen unter 2 Sekunden. Ich würde auch gerne diese arbeiten mit roboguice, wenn möglich.
Dank.
- Ich bin dabei. Nicht sicher, ob es aber funktioniert: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Welche Android API level bist du kompilieren gegen? Wenn es 3.0 oder höher, könnten Sie versuchen,
- Aktivität.neu()
. Die Dokumentation besagt:Noch nicht selber ausprobiert, obwohl.
Berufung neu in Robolectric (beachten Sie, dass Sie nicht haben, um sorgen über die ältere API-Versionen bei der Verwendung von Robolectric) ist ziemlich nah an die Simulation einer änderung der Konfiguration, aber nicht unbedingt fangen alle Fehler, die Sie machen könnte. Insbesondere bedeutet es nicht, erstellen Sie eine neue Instanz der Aktivität (und ich bin mir ziemlich sicher, dass es nicht 'scrub' es), so dass, wenn Sie vergessen haben, wiederherstellen, Mitglied Feldern Ihrer Tätigkeit Ihre tests nicht erwischen. Es funktioniert gut genug für die Prüfung Fragmente, die allerdings nicht beibehalten Fragmente zerstört sind und neu instanziert).
Rufen Sie erstellen, die auf eine Tätigkeit in einem Robolectric test passiert Folgendes:
(Ich fand dies heraus durch überschreiben meisten lifecycle-Methoden in einem test-Aktivitäten und setzen logging-Anweisungen, die in Ihnen)
Können Sie ein wenig näher an eine Reale Konfiguration ändern mit code wie dem folgenden:
(Dieser code ist für Robolectric 2.1 - wenn du auf 2.2 oder bis, Sie vielleicht möchten Sie eine
.visible()
Aufruf nach, dass.resume()
)Mithilfe der oben genannten, sehen Sie die folgenden Ereignisse auftreten:
Dies noch nicht eine exakte übereinstimmung, aber ist viel näher an, was passiert, wenn eine echte änderung der Konfiguration aufgetreten ist.
Ich denke, das könnte eine anständige simulation, was passiert, wenn eine activity zerstört wird durch zu wenig Arbeitsspeicher, da im Gegensatz zu Aufruf von recreate() ich glaube nicht, dass dies halten wird halten Sie Ihre Referenzen beibehalten Fragmente. Ich bin auf unsicherem Boden in dieser Gegend aber!
Update:
Wenn die Aktivität gestartet wurde über die Absicht zu haben, müssen Sie möglicherweise in einem Aufruf withIntent, etwa so:
Hatte ich Erfolg mit ZoFreX Antwort, aber ich möchte noch hinzufügen, wie man eigentlich simulieren die Drehung. Ich weiß, der OP angegeben, die rotation ist kein absolutes muss, aber der Titel deutet an, dass dies aufgenommen werden sollten, in die Antwort, und könnte helfen, Menschen, die am Ende Abgehen hier.
grundsätzlich die Ausrichtung der Tätigkeit vor der Anwendung ZoFrex Lösung. Oder prägnanter code:
Bitte der Kasse ZoFreX die Lösung, denn es enthält zusätzliche info hier nicht enthalten.
Den ActivityController Klasse von Robolectric hat eine configurationChange () - Methode, die wahrscheinlich diese verarbeitet. Hölle, es hat sogar einen javadoc-Kommentar! 😀