Was ist beim Testen der Android-Benutzeroberfläche die richtige Art zu warten, bis die Benutzeroberfläche bereit ist?

8

Der Test sieht so aus (es ist ActivityInstrumentationTestCase2):

%Vor%

Der Code, den ich testen möchte, funktioniert. Der Test schlägt jedoch fehl, weil activity.runOnUiThread sofort zurückkehrt. Ich kann Thread.sleep einfügen und der Test wird grün, aber es sieht irgendwie tollpatschig für mich aus. Muss ich eine Thread-Synchronisation verwenden oder kann die Abfrage für einige UI-Elemente abgeschlossen sein?

Ich habe versucht, es mit @UiThreadTest zu kommentieren, aber das funktioniert auch nicht. Der Code in list.show() füllt einen ListView über einen benutzerdefinierten Adapter und getView wird in einem anderen Thread aufgerufen (nicht der eine Test läuft auf - und ich habe nichts damit zu tun, ich habe keine Threads oder Asyntasks, nichts) . Der Test schlägt erneut fehl, da er zurückgegeben wird, bevor die UI zur Überprüfung bereit ist.

    
Art Shayderov 22.02.2012, 19:24
quelle

2 Antworten

4

Sie müssen ein Thread.sleep machen. Ich glaube nicht, dass es einen Weg gibt. Ich sehe nicht, warum das "klobig" ist; Sie führen einen Test durch, Sie müssen also warten, bis das System das zu testende Oberflächenelement anzeigt.

Es scheint mir jedoch, dass Sie wirklich versuchen, AccountsList oder Liste zu testen. Es gibt keinen Grund, ListView zu testen oder findViewById, es sei denn, Sie sind paranoid.

Sie sollten sich darauf konzentrieren, die Kontenliste und Ihren benutzerdefinierten Adapter zu testen. Sie sollten dazu nicht die Benutzeroberfläche verwenden müssen.

    
Joe Malin 22.02.2012, 20:27
quelle
10

Das Anrufen von waitForIdleSync () ist besser als das Warten auf einen festen Wert Zeit.

    
Mike Playle 27.04.2014 14:09
quelle

Tags und Links