【问题标题】:Best way to test enqueueUniqueWork and cancelUniqueWork WorkManager测试 enqueueUniqueWork 和 cancelUniqueWork WorkManager 的最佳方法
【发布时间】:2021-10-06 15:18:18
【问题描述】:

在 Android 的 Kotlin 中测试 enqueueUniqueWorkcancelUniqueWork 方法的最佳方法是什么? 我只找到了使用 Id 进行测试工作的答案,但我有一个唯一的名称。

【问题讨论】:

    标签: kotlin testing junit mockito


    【解决方案1】:

    经过大量搜索,我找到了这个教程: https://medium.com/@thefallen.class/unit-testing-workmanager-with-dependencies-8ffff7ef5476

    还有 android 文档: https://developer.android.com/topic/libraries/architecture/workmanager/how-to/integration-testing

    仅使用 Mocks 无法直接测试 enqueueUniqueWorkcancelUniqueWork 方法。

    我需要诸如

    之类的库
    • androidx.test:core
    • androidx.work:work-testing
    • org.robolectric:robolectric

    androidx.work:work-testing 允许我初始化一个 Test WorkerManager,这要归功于androidx.test:core 提供的上下文

    @RunWith(RobolectricTestRunner::class)
    class ClassTest{
       private lateinit classToTest: ClassToTest
       private lateinit context: Context
       
       @Before
       fun setUp(){
          context = ApplicationProvider.getApplicationContext()
          val config = Configuration.Builder()
                .setWorkerFactory((WorkerFactory.getDefaultWorkerFactory()))
                .setExecutor(SynchronousExecutor())
                .setMinimumLoggingLevel(Log.DEBUG)
                .build()
          WorkManagerTestInitHelper.initializeTestWorkManager(context, config)
       }
    }
    

    然后,由于诸如

    之类的行,我设法获得了我独特的排队工作和取消工作的状态
    WorkManager.getInstance(context).getWorkInfosForUniqueWork("name").get()[0].state
    

    其中返回了WorkInfo.State.CANCELLEDWorkInfo.State.ENQUEUED等元素

    如果这是最好的方法,我不是 100%,但它允许我测试我想要的。希望它可以帮助其他人

    【讨论】:

      【解决方案2】:

      这两种方法都来自WorkManager 类。这个类是运行环境的一个元素,所以测试它们是WorkManager作者的任务。

      您可能想要做的是测试由这些方法执行/取消的任务或测试它们是否被调用。

      对于第二个选项,请查看名为 Mock 的内容。这是一个特殊的“类”,它假装您的原始类,但您可以控制它的行为方式并检查它的使用方式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-12
        • 2015-10-01
        • 1970-01-01
        • 2012-05-03
        • 2019-08-06
        • 2016-06-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多