gpt4 book ai didi

android - 如何使用 setRequiredNetworkType(NetworkType.CONNECTED) 约束测试 Android WorkManager?

转载 作者:太空狗 更新时间:2023-10-29 14:36:30 26 4
gpt4 key购买 nike

我正在尝试为包含 WorkManager WorkRequests 的类编写 Android 仪器测试。

很长一段时间,我都被困在可以看到 worker 排队但他们从未被执行的地步。经过一段时间的反复试验后,我意识到以下约束阻碍了测试:

...
setConstraints(Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build())
...

如果我删除该约束,工作项将按预期执行。

我的虚拟设备有网络连接,所以不确定为什么在我的测试中没有满足这个限制。

有没有人对如何解决这个问题有任何建议,因为我需要编写测试来涵盖满足和不满足此约束的情况。

我的工作要求非常简单,但在这里:

val workRequest = OneTimeWorkRequestBuilder<T>()
.addTag(syncWork.getSyncType().name)
.setConstraints(Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build())
.build()

syncWorkRepository.save(syncWork.apply { id = workRequest.id.toString() })

workManager.enqueue(workRequest)

我试过:

val wifi = context.getSystemService(Context.WIFI_SERVICE) as WifiManager
wifi.isWifiEnabled = true

但这会引发安全异常:

SecurityException: WifiService: Neither user 10139 nor current process has android.permission.CHANGE_WIFI_STATE.

我还在我的测试中添加了代码来检查网络状态:

val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val activeNetwork: NetworkInfo? = cm.activeNetworkInfo
val isConnected: Boolean = activeNetwork?.isConnected == true

并且 isConnected 为真,但仍未满足 WorkManager 约束,因此未执行工作。

还试过:

val testDriver = getTestDriver()

testDriver?.setAllConstraintsMet(workInfo.id)

在我通过标记方法观察 LiveData 中,我可以看到它针对 ENQUEUED 状态执行了一次。

这是我在测试中的观察者:

syncManager.syncWork(SyncType.ALL)
.observe(lifecycleOwner, Observer { listOfWorkInfo ->
listOfWorkInfo.forEach { workInfo ->
Log.d("TAG", "${workInfo.id}")
testDriver?.setAllConstraintsMet(workInfo.id)
if(workInfo.state == WorkInfo.State.SUCCEEDED) {
Log.d("TAG", workInfo.state.name)
latch.countDown()
} else if(workInfo.state != WorkInfo.State.ENQUEUED) {
Log.d("TAG", workInfo.state.name)
latch.countDown()
}
}
})

谢谢,保罗

最佳答案

您应该使用 WorkManagerTestInitHelper。使用 TestDriver 并将约束标记为满足后,您的 Worker 应该执行。

关于android - 如何使用 setRequiredNetworkType(NetworkType.CONNECTED) 约束测试 Android WorkManager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54459050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com