测试 enqueueUniqueWork 和 cancelUniqueWork WorkManager 的最佳方法
Best way to test enqueueUniqueWork and cancelUniqueWork WorkManager
在 Android 中测试 Kotlin 中的方法 enqueueUniqueWork
和 cancelUniqueWork
的最佳方法是什么?
我只找到了使用 Id 测试工作的答案,但我有一个唯一的名称。
两种方法均来自WorkManager
class。此 class 是运行时环境的一个元素,因此对其进行测试是 WorkManager
.
作者的任务
您可能想做的是通过这些方法测试任务 executed/cancelled 或测试它们是否被调用。
对于第二个选项,请查看名为 Mock 的东西。这是一个特殊的“class”,伪装成您原来的 class,但您可以控制它的行为方式并检查它的使用方式。
经过大量搜索,我找到了这个教程:
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 直接测试方法 enqueueUniqueWork
和 cancelUniqueWork
。
我需要
这样的库
androidx.test:core
androidx.work:work-testing
org.robolectric:robolectric
由于 androidx.test:core
提供的上下文,androidx.work:work-testing
允许我初始化一个 Test WorkerManager
@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%,但它允许我测试我想要的东西。希望它可以帮助其他人
在 Android 中测试 Kotlin 中的方法 enqueueUniqueWork
和 cancelUniqueWork
的最佳方法是什么?
我只找到了使用 Id 测试工作的答案,但我有一个唯一的名称。
两种方法均来自WorkManager
class。此 class 是运行时环境的一个元素,因此对其进行测试是 WorkManager
.
您可能想做的是通过这些方法测试任务 executed/cancelled 或测试它们是否被调用。
对于第二个选项,请查看名为 Mock 的东西。这是一个特殊的“class”,伪装成您原来的 class,但您可以控制它的行为方式并检查它的使用方式。
经过大量搜索,我找到了这个教程: 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 直接测试方法 enqueueUniqueWork
和 cancelUniqueWork
。
我需要
这样的库androidx.test:core
androidx.work:work-testing
org.robolectric:robolectric
androidx.test:core
提供的上下文,androidx.work:work-testing
允许我初始化一个 Test WorkerManager
@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%,但它允许我测试我想要的东西。希望它可以帮助其他人