2016-01-05 2 views
8

Ich benutze Espresso 2 zum Testen meiner Android-App. Intermediär sehe ich Tests zufällig mit dieser Espresso Fehlermeldung fehlschlagen:Espresso 2 auf Android, Intermediate-Tests scheitern, nachdem die Aktivität im Test nicht gestartet wurde, während Aktivitäten aus früheren Tests noch aktiv sind

fehlgeschlagen: testLongPressXXXXX (com.company.xxx.tests.testSuite.Test) ----- ----- Ausnahme beginnen android.support .test.espresso.NoMatchingViewException: Es wurden keine Ansichten in der Hierarchie gefunden, die übereinstimmten: mit der ID: com.company.xxx:id/xxx_view_id Hierarchie anzeigen: +> DecorView {id = -1, visibility = VISIBLE, width = 729, height = 319, has-focus = falsch, has-focusable = falsch, has-window-focus = wahr, is-clickable = falsch, is-enabled = true, is-focused = falsch, is-focusable = false, is-layout- requested = false, ist-selected = false, root-is-layout-required = false, has-input-connection = false, x = 0.0, y = 0.0, untergeordnete Zahl = 1} ...

Jeder Anfang eines Tests die Espresso Instrumentierung druckt die Anzahl der Aktivitäten, die noch am Leben von einem vorherigen Test sind:

MonitoringInstrumentation: Aktivitäten, die noch in ERSTELLT sind GESTOPPT:

(Anzahl) Immer wenn ich einen fehlgeschlagenen Test sehe, sehe ich immer, dass die Anzahl der aktiven Aktivitäten nicht 0 ist, was mich zu der Annahme verleitet hat, dass dies der Grund für dieses Problem ist, obwohl der Test vor allem bei Live-Aktivitäten noch erfolgreich abläuft .

Wenn dies geschieht, zeigt das Gerät den Startbildschirm für etwa 10 Sekunden an, bevor er fehlschlägt. Das passiert natürlich nur, wenn ich mehr als einen Test gleichzeitig mache.

Meine Frage ist, warum gibt es Live-Aktivitäten zwischen den Tests und gibt es eine Möglichkeit, die Instrumentation zu warten, bis die Aktivitäten aus dem vorherigen Test abgeschlossen sind, bevor Sie mit dem nächsten Test fortfahren.

Wenn jemand eine andere Idee hat, warum die Tests zwischenzeitlich versagen, wird das auch hilfreich sein.

+1

Zunächst öffnen Sie in Ihrem Gerät/Emulator "Developers Options" und stellen Sie alle Animationen von '1x',' 3x' auf 'none'. Dann führe den Test durch - du würdest Unterschiede sehen ;-) – piotrek1543

+1

Danke piotrek Ich habe das gemacht und es passiert immer noch intermediär. Ich kann auch immer noch sehen, dass die Anzahl der Live-Aktivitäten von einem vorherigen Test immer noch nicht 0 ist. – royeet

+0

Ich habe jetzt das gleiche Problem. Hast du irgendwelche Lösungen bekommen? – Raghuveer

Antwort

5

Diese Frage wurde vor einer Weile gestellt, aber da dies immer noch relevant zu sein scheint, dachte ich, ich würde teilen, was ich gefunden habe. Ich stehe vor einem ähnlichen Problem - AmbiguousViewMatcherException auf Ansichten, die eine eindeutige ID haben, verschiedene Tests fehlschlagen zufällig - wahrscheinlich aufgrund von Aktivitäten nicht zerstört werden.

Dies scheint ein bekanntes Problem zu sein und sollte in der nächsten Version behandelt werden (siehe hier: https://github.com/google/android-testing-support-library/issues/16). Anscheinend werden onDestroy() und isFinishing() nicht nach jedem Test zuverlässig aufgerufen, so dass Sie nicht jedes Mal eine neue Aktivität erhalten oder sogar zwei Aktivitäten übereinander haben.

Bis sie es beheben, habe ich beschlossen, meine Zeit nicht mit einem Workaround zu verschwenden, sondern mit Genymotion Emulatoren, die mein Problem lösen - möglicherweise weil sie schneller laufen als die eingebauten in Android Studio (wie vorgeschlagen here) .

+0

Ich habe auch anekdotisch festgestellt, dass meine Tests eher erfolgreich sind, wenn der Emulator den Fokus hat, als wenn er im Hintergrund ist. – TBridges42