我有一个正确实现的JobService,在简单的情况下工作正常,但我想确保在所有条件下正确测试服务.
我想使用Instrumentation测试用例,以便我可以使用getSystemService(JobScheduler.class).schedule(job)测试作业调度的完整流程,以及在我的JobService和onStartJob / onStopJob调用中调用onCreate .
我的JobService有时会启动AsyncTasks(从而在onStartJob中返回true),有时它会为已经完成的工作返回false.我有各种各样的jobFinished调用(mJobParameters,needsReschedule),我想确保它们也能正常工作.
我一直在努力让仪表测试工作在过去几天,但我能够提出的最好的是一项测试,安排工作,但工作永远不会离开待定状态.我已经尝试了各种等待/后台线程配置,看看是否需要释放UI线程但是没有取得任何成功.
谷歌似乎没有表现出任何正确测试这个组件的完整流程的东西,这是令人惊讶的,因为它们似乎迫使每个人在更新的API发布时使用它.
我已经看过What tools are available to test JobScheduler?但是用adb自动化很困难(我对使用它的答案不感兴趣).
有没有人知道使用Instrumentation测试使用JobScheduler端到端测试JobService的方法?
解决方法
感谢Google开发人员非常敏感地回答我的问题:
https://issuetracker.google.com/issues/62543492,现在已经很清楚如何做了!
看来他们提供的设备测试示例的部分设置是将正在运行的应用程序设置为活动状态,并且主要通过cmd jobscheduler< command>来了解作业状态.从测试中调用shell
try { SystemUtil.runShellCommand(getInstrumentation(),"cmd activity set-inactive " + mContext.getPackageName() + " false"); } catch (IOException e) { Log.w("ConstraintTest","Failed setting inactive false",e); }
见the provided InstrumentationTestCase subclass they posted in the bug notes