【问题标题】:Testing initial delay on CoroutineWorker with Dependencies使用依赖项测试 CoroutineWorker 的初始延迟
【发布时间】:2021-10-27 14:02:13
【问题描述】:
【问题讨论】:
标签:
testing
delay
kotlin-coroutines
android-workmanager
coroutineworker
【解决方案1】:
看了2019 Android Dev Summit的this video(13:00),找到了这个问题的答案:
-
在为测试初始化workManager时(通过WorkManagerTestInitHelper.initializeTestWorkManager方法),我们必须通过配置步骤传递我们自定义的WorkerFactory;
-
像往常一样使用OneTimeWorkRequestBuilder 方法设置您的请求工作者;
-
默认情况下,测试中Workmanager 实例的所有约束
模式未满足。使用TestDriver 的实例,我们可以将这些约束标记为满足。
以下是总结上述步骤的示例:
@Test
fun checkInitialDelay() {
val config = Configuration.Builder()
.setWorkerFactory(
MyWorkFactory(myDependencies)
)
.setMinimumLoggingLevel(Log.DEBUG)
.setExecutor(SynchronousExecutor())
.build()
// Initialize WorkManager
WorkManagerTestInitHelper.initializeTestWorkManager(context, config)
//setup the request work
val request =
OneTimeWorkRequestBuilder<MyWork>()
.setInitialDelay(10, TimeUnit.MINUTES)
.build()
val workManager = WorkManager.getInstance(context)
// Get the TestDriver
val testDriver = WorkManagerTestInitHelper.getTestDriver(context)
// Enqueue
workManager.enqueue(request).result.get()
// Tells the WorkManager test framework that initial delays are now met.
testDriver?.setInitialDelayMet(request.id)
// Get WorkInfo and outputData
val workInfo = workManager.getWorkInfoById(request.id).get()
// Assert
assert(workInfo.state == WorkInfo.State.SUCCEEDED)
}