Как протестировать PeriodicWorkRequest раньше, чем MIN_PERIODIC_INTERVAL_MILLIS?

Чтобы проверить повторяющуюся работу, мне нужно подождать целых 15 минут ( справка), чтобы проверить повторяемость, и это действительно неэффективно. Есть ли лучший и быстрый способ для разработчиков проверить это раньше?

0 ответов

Вы можете протестировать PeriodicWorkRequest раньше, чем MIN_PERIODIC_INTERVAL_MILLIS, что составляет 15 минут.

Для этого вам понадобится WorkManagerTestInitHelper доступно в androidx.work.testing.

Прежде всего добавьте следующую зависимость в файл build.gradle для вашего приложения или модуля:

//Current stable release is 2.3.4
androidTestImplementation "androidx.work:work-testing:2.3.4

Далее вам нужно использовать setPeriodDelayMet метод доступен с TestDriverкоторый может использоваться, чтобы указать, что интервал завершен и выполняет PeriodicWorkRequest раньше, чем MIN_PERIODIC_INTERVAL_MILLIS (15 минут). Образец кода:

@Test
public void testPeriodicWork(Context context) throws Exception {
    // Setup input data
    Data input = new Data.Builder().put(KEY_1, 1).put(KEY_2, 2).build();

    // Create periodic work request
    PeriodicWorkRequest request = new PeriodicWorkRequest.Builder(MyWorker.class, 15,  TimeUnit.MINUTES)
                                       .setInputData(input)
                                       .build();
    // Enqueue periodic request
    WorkManager.getInstance(context).enqueueUniquePeriodicWork(WORKER_TAG, ExistingPeriodicWorkPolicy.REPLACE, request);

    // Initialize testDriver
    TestDriver testDriver = WorkManagerTestInitHelper.getTestDriver();

    // Tells the testing framework the period delay is met, this will execute your code in doWork() in MyWorker class
    testDriver.setPeriodDelayMet(request.getId());

}

Дополнительную информацию о тестировании PeriodicWorkRequest можно найти на https://developer.android.com/topic/libraries/architecture/workmanager/how-to/integration-testing.

Подробнее о тестировании WorkManager см. На https://developer.android.com/reference/androidx/work/testing/WorkManagerTestInitHelper и https://developer.android.com/reference/androidx/work/testing/TestDriver.

Если я хорошо понимаю вашу проблему, вам нужно протестировать работу вашего Вокера, независимо от того, периодическая она или нет, тогда вы можете использовать OneTimeWorkRequest

val work = OneTimeWorkRequest.Builder(TheWorker::class.java).build()
WorkManager.getInstance().enqueue(work)
Другие вопросы по тегам