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.
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.
Das Anrufen von waitForIdleSync () ist besser als das Warten auf einen festen Wert Zeit.