如何使用Instrumentation测试测试JobService?

时间:2017-06-08 19:42:59

标签: android android-jobscheduler

我有一个JobService已正确实施,并且在简单的情况下工作正常,但我想确保在所有条件下对服务进行适当测试。

我想使用Instrumentation测试用例,这样我就可以测试getSystemService(JobScheduler.class).schedule(job)作业调度到我onCreateJobService的调用的完整流程。我的onStartJob / onStopJob来电。

我的JobService有时会启动AsyncTask(因此会在true中返回onStartJob),有时会返回false来完成已完成的工作。我有jobFinished(mJobParameters, needsReschedule)的各种电话,我想确保它们也正常工作。

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

Google似乎没有表现出任何正确测试此组件的完整流程的内容,这是令人惊讶的,因为它们似乎迫使每个人在新的API发布时使用它。

我见过What tools are available to test JobScheduler?,但很难用adb自动化(我对使用它的答案不感兴趣)。

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

1 个答案:

答案 0 :(得分:4)

感谢Google开发人员非常敏感地回答我的问题:https://issuetracker.google.com/issues/62543492,现在很清楚如何做到这一点!

它们提供的设备测试示例的部分设置似乎是将正在运行的应用程序设置为活动状态,并且主要通过shell 上的cmd jobscheduler <command>调用来了解作业状态测试

    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