首页 > 解决方案 > Android Jetpack WorkManager - 测试 UniquePeriodicWork 执行

问题描述

我正在使用 Android 的Jetpack WorkManager每天安排一次定期下载任务。我按照说明进行操作,并Success在工作入队时得到回复:

val work = PeriodicWorkRequestBuilder<UpdateWorker>(1, TimeUnit.DAYS)
            .setConstraints(constraints) // Internet connection, idle and battery not low
            .addTag("ANNOUNCEMENTS_WORKER_TAG")
            .build()

val workOperation = workManager.enqueueUniquePeriodicWork("UPDATE_WORK_TAG", ExistingPeriodicWorkPolicy.KEEP, work)

workOperation.state.observe(this, Observer { state ->
    Timber.d("state: $state") // is successful
})

我现在怎么知道这真的发生了?我如何(单元)测试我的任务的重复执行?

标签: androidandroid-jetpackandroid-workmanager

解决方案


您实际上可以在 WorkManager 上编写仪器测试:

@RunWith(AndroidJUnit4::class)
class UpdateWorkerTest{

    private lateinit var context: Context

    @Before
    fun setUp() {
        context = ApplicationProvider.getApplicationContext()
    }

    @Test
    fun testWorkerCall() {
        val yourWorker = TestListenableWorkerBuilder<UpdateWorker>(context).build()
        runBlocking {
            val result = yourWorker.doWork()
            assertThat(result, `is`(ListenableWorker.Result.success()))
        }
    }

}

我现在怎么知道这真的发生了

您必须为此信任 Google 团队,并希望您没有 One Plus 设备。

出于您自己的考虑,您可以只玩一点您的设备,也许将其关闭然后再打开,然后等到作业运行(在控制台上运行日志)等。

文档中有更多关于测试的内容


推荐阅读