如何在MIN_PERIODIC_INTERVAL_MILLIS之前测试PeriodicWorkRequest?

9
为了测试重复工作,我需要等待整整15分钟(参考文献)来测试重复性,这实在是不太高效。开发人员有没有更好、更快的方法来更早地测试呢?

将实际执行工作的代码与“WorkManager”相关的类隔离开来。为该代码编写单元测试用例或仪器化测试用例。 - CommonsWare
你可以在这里查看:https://developer.android.com/topic/libraries/architecture/workmanager/how-to/testing WorkManager的工作测试工件。 - MrVasilev
2个回答

2

您可以在15分钟之前测试PeriodicWorkRequest。

为此,您需要在androidx.work.testing中提供WorkManagerTestInitHelper

首先,在应用程序或模块的build.gradle文件中添加以下依赖项:

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

接下来,您需要使用TestDriver提供的setPeriodDelayMet方法,该方法可用于指示间隔已完成,并在MIN_PERIODIC_INTERVAL_MILLIS(15分钟)之前执行PeriodicWorkRequest。 样例代码:

@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());

}

您可以在https://developer.android.com/topic/libraries/architecture/workmanager/how-to/integration-testing#periodic-work中找到有关测试PeriodicWorkRequest的更多信息。
了解有关测试WorkManager的更多信息,请访问https://developer.android.com/reference/androidx/work/testing/WorkManagerTestInitHelperhttps://developer.android.com/reference/androidx/work/testing/TestDriver。请注意,保留HTML标签。

0
如果我理解你的问题正确的话,你需要测试你的Worker的工作,不管它是否是周期性的,那么你可以使用OneTimeWorkRequest。
val work = OneTimeWorkRequest.Builder(TheWorker::class.java).build()
WorkManager.getInstance().enqueue(work)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接