【问题标题】:Testing initial delay on CoroutineWorker with Dependencies使用依赖项测试 CoroutineWorker 的初始延迟
【发布时间】:2021-10-27 14:02:13
【问题描述】:

我知道 WorkManager 为测试工作者提供了一个工作测试工件,我们可以使用TestListenableWorkerBuilder 来测试CoroutineWorker(有关更多信息,请参阅此link)。我发现 Ian Robertsmedium article 展示了如何通过创建自己的 WorkerFactory 来测试具有依赖关系的 CoroutineWorker。

根据official documentation,我们可以使用 TestDriver 测试 Worker 的初始延迟,但没有提及 CoroutinesWork 上的测试延迟、约束等。有没有办法在 CoroutineWorker 中使用 TestListenableWorkerBuilder 执行此类测试?

【问题讨论】:

    标签: testing delay kotlin-coroutines android-workmanager coroutineworker


    【解决方案1】:

    看了2019 Android Dev Summit的this video(13:00),找到了这个问题的答案:

    1. 在为测试初始化​​workManager(通过WorkManagerTestInitHelper.initializeTestWorkManager方法),我们必须通过配置步骤传递我们自定义的WorkerFactory

    2. 像往常一样使用OneTimeWorkRequestBuilder 方法设置您的请求工作者;

    3. 默认情况下,测试中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)
    }
    

    【讨论】:

      猜你喜欢
      • 2013-07-08
      • 1970-01-01
      • 2019-11-08
      • 2020-02-18
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多