测试enqueueUniqueWork和cancelUniqueWork WorkManager的最佳方法



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

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

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

不能仅用mock直接测试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%,如果这是最好的方法,但它允许我测试我想要的。希望能对大家有所帮助

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

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

对于第二个选项,请看看叫做Mock的东西。这是一个特殊的"类",假装你原来的类,但你可以控制它的行为和检查它是如何被使用的。

相关内容

  • 没有找到相关文章

最新更新