2017-06-08 1 views
7

Ich habe eine JobService, die ordnungsgemäß implementiert ist und funktioniert in einfachen Fällen gut, aber ich möchte sicherstellen, dass der Dienst ordnungsgemäß unter allen Bedingungen getestet wird.Wie kann ich meinen JobService mit einem Instrumentationstest testen?

Ich mag einen Instrumentation Testfall verwenden, so dass ich mit getSystemService(JobScheduler.class).schedule(job) zum Aufruf von onCreate in meiner JobService und meine onStartJob/onStopJob Anrufen, um den Vollstrom aus der Terminierung des Auftrags zu testen.

Meine JobService Einführungen AsyncTask s manchmal (und damit true in onStartJob Rückkehr) und andere Zeiten, es gibt false für die Arbeit, die bereits getan hat. Ich habe verschiedene Anrufe an jobFinished(mJobParameters, needsReschedule) und ich möchte sicherstellen, dass sie auch richtig funktionieren.

Ich habe versucht, Instrumentierungstests für die letzten paar Tage zu bekommen, aber das Beste, was ich habe, ist ein Test, der den Job einplant, aber der Job verlässt nie den anstehenden Zustand. Ich habe verschiedene Konfigurationen von Warte-/Hintergrund-Threads ausprobiert, um zu sehen, ob das Freigeben des UI-Threads erforderlich ist, aber keinen Erfolg hatte.

Es scheint auch nicht, dass Google irgendetwas aufgetaucht ist, um den vollen Fluss dieser Komponente richtig zu testen, was überraschend ist, da sie jeden dazu zwingen, es zu benutzen, sobald neuere APIs veröffentlicht werden.

Ich habe What tools are available to test JobScheduler? gesehen, aber es ist schwierig zu automatisieren mit adb (und ich bin nicht in Antworten interessiert, die es verwenden).

Kennt jemand eine Möglichkeit, einen JobService mit dem JobScheduler zu beenden, indem er Instrumentierungstests verwendet?

+0

Wenn dies nicht genug Aufmerksamkeit bekommen, vergessen Sie nicht, Sie können ein Bounty hinzufügen. (Wir neigen dazu, Anfragen nach Upvotes in Posts hier zu entmutigen, aber auf einmal könnte man sie in die Kommentare einfügen, wo sie für zukünftige Leser keine Ablenkung sind). – halfer

+1

Als ich diese Änderung vorgenommen habe, war die Frage für eine Prämie nicht berechtigt –

+0

Ich habe eine Feature-Anfrage mit Google zu diesem Thema geöffnet: https://issuetracker.google.com/issues/62543492 –

Antwort

4

Dank der Entwickler von Google, die sehr reagieren, um meine Frage hier zu beantworten: https://issuetracker.google.com/issues/62543492, ist es jetzt klar, wie es geht!

es, dass ein Teil der Einrichtung der Instrumentierungstestbeispiele erscheint sie vorgesehen ist, Einstellen der laufenden Anwendung als aktive und meist das Lernen über den Jobstatus über cmd jobscheduler <command> Invokationen auf der Schale von den Test

try { 
     SystemUtil.runShellCommand(getInstrumentation(), "cmd activity set-inactive " 
       + mContext.getPackageName() + " false"); 
    } catch (IOException e) { 
     Log.w("ConstraintTest", "Failed setting inactive false", e); 
    } 

Siehe the provided InstrumentationTestCase subclass they posted in the bug notes

Verwandte Themen