WorkManager:立即调用 doWork() 进行测试
WorkManager: Call doWork() immediately for test purposes
如果我有 PeriodicWorkRequest
,我可以设置一个时间间隔 - 最短为 15 分钟。
但是,如何在不等待 15 分钟的情况下测试我的 doWork()
方法是否有效?
是否可以使用 OneTimeWorkRequest
进行测试?
提前致谢
是的,没有什么可以阻止您使用 OneTimeWorkRequest
。
val work = OneTimeWorkRequest.Builder(MyWorker::class.java).build()
WorkManager.getInstance().enqueue(work)
请记住,这将不允许您测试 Worker
是否会在设定的分钟数后触发,就像使用 PeriodicWorkRequest
时一样。但是,它可以让您测试您的代码是否有效,而无需等待。
是的,PeriodicWorkRequest
的最短时间间隔为 15 分钟,并且无法更改,因为它已硬编码在 PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS
。
但是,出于测试目的,您可以在 WorkManagerTestInitHelper available in androidx.work.testing.
的帮助下随时调用 PeriodicWorkRequest
的 doWork() 方法
在您的应用程序或模块的 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());
}
阅读有关测试的更多信息PeriodicWorkRequest at Testing Periodic Work
如果我有 PeriodicWorkRequest
,我可以设置一个时间间隔 - 最短为 15 分钟。
但是,如何在不等待 15 分钟的情况下测试我的 doWork()
方法是否有效?
是否可以使用 OneTimeWorkRequest
进行测试?
提前致谢
是的,没有什么可以阻止您使用 OneTimeWorkRequest
。
val work = OneTimeWorkRequest.Builder(MyWorker::class.java).build()
WorkManager.getInstance().enqueue(work)
请记住,这将不允许您测试 Worker
是否会在设定的分钟数后触发,就像使用 PeriodicWorkRequest
时一样。但是,它可以让您测试您的代码是否有效,而无需等待。
是的,PeriodicWorkRequest
的最短时间间隔为 15 分钟,并且无法更改,因为它已硬编码在 PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS
。
但是,出于测试目的,您可以在 WorkManagerTestInitHelper available in androidx.work.testing.
的帮助下随时调用PeriodicWorkRequest
的 doWork() 方法
在您的应用程序或模块的 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());
}
阅读有关测试的更多信息PeriodicWorkRequest at Testing Periodic Work