2017-06-08 24 views
7

Mam JobService, który jest poprawnie zaimplementowany i działa prawidłowo w prostych przypadkach, ale chcę zapewnić, że usługa jest właściwie testowana we wszystkich warunkach.Jak przetestować usługę JobService za pomocą testu oprzyrządowania?

Chciałbym użyć przypadek testowy Instrumentation tak, że mogę przetestować pełnego przepływu od harmonogramu pracy z getSystemService(JobScheduler.class).schedule(job) do wezwaniem onCreate w moim JobService i moich onStartJob/onStopJob połączeń.

Moi JobService uruchamia AsyncTask s czasami (a tym samym wracając true w onStartJob), a innym razem powraca false do pracy, która jest już zrobione. Mam różne połączenia z numerem jobFinished(mJobParameters, needsReschedule) i chcę się upewnić, że działają one również poprawnie.

Próbowałem testować oprzyrządowanie w ciągu ostatnich kilku dni, ale najlepsze, co udało mi się wymyślić, to test, który planuje pracę, ale praca nigdy nie opuszcza stanu oczekiwania. Próbowałem różnych konfiguracji wątków oczekujących/tła, aby zobaczyć, czy uwolnienie wątku UI jest tym, co jest potrzebne, ale nie zakończyło się sukcesem.

Nie wydaje się również, że Google ujawnił cokolwiek, aby właściwie przetestować pełny przepływ tego komponentu, co jest zaskakujące, biorąc pod uwagę, jak wydają się zmuszać wszystkich do korzystania z niego w miarę wydawania nowych API.

Widziałem What tools are available to test JobScheduler?, ale trudno jest zautomatyzować z adb (i nie jestem zainteresowany odpowiedziami, które go używają).

Czy ktoś zna sposób, aby od końca do końca przetestować usługę JobService za pomocą narzędzia JobScheduler za pomocą testów Instrumentation?

+0

Jeśli to nie przykuje wystarczającej uwagi, nie zapomnij o dodaniu do niego nagrody. (Mamy tendencję do zniechęcania do zgłaszania próśb o awanse w postach, ale można je umieścić w komentarzach, gdzie nie są one rozproszeniem dla przyszłych czytelników). – halfer

+1

Kiedy wprowadziłem tę zmianę, pytanie nie kwalifikowało się do otrzymania nagrody –

+0

Mam otwarte zapytanie dotyczące funkcji w Google na ten temat: https://issuetracker.google.com/issues/62543492 –

Odpowiedz

4

Dzięki temu, że inżynierowie Google bardzo chętnie odpowiedzą na moje pytanie tutaj: https://issuetracker.google.com/issues/62543492, teraz jest jasne, jak to zrobić!

Okazuje się, że część skonfigurować przykładów testowych oprzyrządowanie one przewidziane jest ustawienie działa aplikacja jako aktywny, a przede wszystkim poznanie stanu pracy poprzez cmd jobscheduler <command> inwokacji na powłoce z test

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

Patrz: the provided InstrumentationTestCase subclass they posted in the bug notes

Powiązane problemy