testing - 使用依赖项测试 CoroutineWorker 的初始延迟
问题描述
我知道 WorkManager 为测试工作者提供了一个工作测试工件,我们可以使用TestListenableWorkerBuilder来测试CoroutineWorker(有关更多信息,请参阅此链接)。我找到了Ian Roberts的一篇中篇文章,展示了如何通过创建自己的 WorkerFactory 来测试具有依赖关系的 CoroutineWorker。
根据官方文档,我们可以使用 TestDriver 测试 Worker 的初始延迟,但没有提及在 CoroutinesWork 上测试延迟、约束等。有没有办法使用 TestListenableWorkerBuilder 在 CoroutineWorker 中执行此类测试?
解决方案
在观看了 2019 Android Dev Summit 的这段视频(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)
}
推荐阅读
- java - 无法使用 Jackson 和 Gson 解析日期值
- exec - puppet exec:找不到命令“源”
- spring-mvc - 为什么图像来源未知?
- javascript - React SVGR 渲染 svg 不正确
- reactjs - 提交后 setState 不起作用,但数据库中的数据已更新
- api-doc - 如何在不使用 apidocjs 重建项目的情况下插入/更新/删除 API 文档?
- postgresql - Postgres CASE WHEN IN 查询
- exchange-server - Exchange 2016 服务器如果客户端配置为 POP3 或 MAPI 客户端,我如何重新识别?
- python - Django查询按所有满足条件然后所有其他条件排序
- markdown - 如何在 Markdown 中创建指向某个单词的链接?