在Android中测试Kotlin中的enqueueUniqueWork
和cancelUniqueWork
方法的最佳方法是什么?我只找到答案测试工作与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直接测试enqueueUniqueWork
和cancelUniqueWork
方法。
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.CANCELLED
或WorkInfo.State.ENQUEUED
等元素
我不是100%,如果这是最好的方法,但它允许我测试我想要的。希望能对大家有所帮助
这两个方法都来自WorkManager
类。这个类是运行时环境的一个元素,所以测试它们是WorkManager
的作者的任务。
你可能想做的是测试由这些方法执行/取消的任务,或者测试它们是否被调用。
对于第二个选项,请看看叫做Mock的东西。这是一个特殊的"类",假装你原来的类,但你可以控制它的行为和检查它是如何被使用的。