Android Jetpack WorkManager - Испытание UniquePeriodicWork Выполнение - PullRequest
0 голосов
/ 27 февраля 2019

Я использую Android Jetpack WorkManager для планирования некоторых периодических задач загрузки один раз в день.Я следовал инструкциям и получил Success обратно, когда Работа поставлена ​​в очередь:

val work = PeriodicWorkRequestBuilder<UpdateWorker>(1, TimeUnit.DAYS)
            .setConstraints(constraints) // Internet connection, idle and battery not low
            .addTag("ANNOUNCEMENTS_WORKER_TAG")
            .build()

val workOperation = workManager.enqueueUniquePeriodicWork("UPDATE_WORK_TAG", ExistingPeriodicWorkPolicy.KEEP, work)

workOperation.state.observe(this, Observer { state ->
    Timber.d("state: $state") // is successful
})

Как я теперь узнаю, что это действительно происходит?Как я могу (юнит) проверить повторяющееся выполнение моей задачи?

Ответы [ 3 ]

0 голосов
/ 28 февраля 2019

Во-первых, имейте в виду, что интервал, который вы устанавливаете, является минимальным периодом между двумя после выполнения вашего Worker.WorkManager собирается перенести выполнение в соответствии с ограничениями и политиками батареи (режим ожидания и т. Д.).Конечным результатом является то, что время исполнения вашего работника будет меняться (сначала выполнение в 6:00, затем в 6:21, затем в 6:34 и т. Д.).Это объясняется в справочнике PeriodicWorkRequest .

После того, как вы поставили в очередь ваш WorkRequest, вы можете наблюдать его состояние с помощью LiveData (из объекта Operation , как выделать или запрашивать WorkInfo с getWorkInfosForUniqueWorkLiveData. Таким образом вы можете получить обновление статуса для вашего WorkRequest (BLOCKED -> ENQUEUED -> RUNNING -> SUCCEDED/ FAILED и в любой момент статус может перейти в CANCELLED).

Вы можете получить более подробную информацию о том, как наблюдать ваш статус WorkRequest в этом блоге .

0 голосов
/ 23 августа 2019

Чувак, ты должен тестировать свой код, а не WorkManager Framework.поэтому вы должны создать такой метод в своем коде:

val ONE_DAY_IN_MILLIS = 86400000‬

fun createWorker() : WorkRequest {

    val work = PeriodicWorkRequestBuilder<SendDataWorker>(ONE_DAY_IN_MILLIS, TimeUnit.MILLISECONDS)
            .setConstraints(constraints) // Internet connection, idle and battery not low
            .addTag("ANNOUNCEMENTS_WORKER_TAG")
            .build()
}

и написать тестовый метод для его проверки:

val work = createPeriodicWorkRequest()
assertEquals(work.workSpec.intervalDuration, ONE_DAY_IN_MILLIS)
0 голосов
/ 28 февраля 2019

Вы должны использовать библиотеку тестирования WorkManager для модульного тестирования ваших рабочих.Включите его, следуя приведенным здесь инструкциям: https://developer.android.com/jetpack/androidx/releases/work#declaring_dependencies

Обзорные документы для пакета могут быть полезны для вас: https://developer.android.com/reference/androidx/work/testing/package-summary

Вы можете посмотреть некоторые примеры использования здесь: https://github.com/googlesamples/android-architecture-components/blob/master/WorkManagerSample/app/src/androidTest/java/com/example/background/ImageOperationsTest.kt

...