如何使用Instrumentation测试测试JobService?

Hyp*_*cle 9 android android-jobscheduler

我有一个JobService正确实现并在简单的情况下工作正常,但我想确保在所有条件下正确测试服务.

我想使用一个Instrumentation测试用例,这样我就可以测试从作业调度getSystemService(JobScheduler.class).schedule(job)onCreatemy JobService和my onStartJob/ onStopJobcalls 调用的全部流程.

我的JobService发布AsyncTask有时候是比较(从而返回trueonStartJob)和其他时间返回false了一个已经完成的工作.我有各种电话jobFinished(mJobParameters, needsReschedule),我想确保它们也能正常工作.

我一直在努力让仪表测试在过去几天工作,但我能够提出的最好的测试是安排工作,但工作从未离开待定状态.我已经尝试了各种等待/后台线程配置,看看是否需要释放UI线程但是没有取得任何成功.

谷歌似乎没有表现出任何正确测试这个组件的全部流程的东西,这是令人惊讶的,因为它们似乎迫使每个人在新的API发布时使用它.

我见过哪些工具可以测试JobScheduler?但是很难自动化adb(我对使用它的答案不感兴趣).

有没有人知道使用Instrumentation测试使用JobScheduler端到端测试JobService的方法?

Hyp*_*cle 4

感谢 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);
    }
Run Code Online (Sandbox Code Playgroud)

请参阅他们在错误注释中发布的提供的 InstrumentationTestCase 子类