【问题标题】:How do I test my JobService with an Instrumentation test?如何使用 Instrumentation 测试来测试 JobService?
【发布时间】:2017-06-08 19:42:59
【问题描述】:

我有一个JobService,它已正确实施并且在简单的情况下工作正常,但我想确保该服务在所有条件下都经过正确测试。

我想使用 Instrumentation 测试用例,以便我可以测试从使用getSystemService(JobScheduler.class).schedule(job) 调度作业到在我的JobService 和我的onStartJob/@ 中调用onCreate 的完整流程987654328@ 电话。

我的JobService 有时会启动AsyncTasks(从而在onStartJob 中返回true),有时它会为已经完成的工作返回false。我有很多电话给jobFinished(mJobParameters, needsReschedule),我想确保它们也能正常工作。

在过去的几天里,我一直在努力让仪器测试正常工作,但我能想到的最好的方法是安排工作但工作永远不会离开挂起状态的测试。我尝试了等待/后台线程的各种配置,看看是否需要释放 UI 线程,但没有任何成功。

Google 似乎也没有提供任何东西来正确测试这个组件的完整流程,这令人惊讶,因为随着新 API 的发布,他们似乎强迫每个人都使用它。

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

有谁知道使用仪器测试通过 JobScheduler 对 JobService 进行端到端测试的方法?

【问题讨论】:

  • 如果这没有引起足够的重视,别忘了你可以给它加个赏金。 (我们倾向于不鼓励在此处发布帖子中的点赞请求,但可以暂时将它们放在 cmets 中,这样不会分散未来读者的注意力)。
  • 当我进行编辑时,该问题没有资格获得赏金
  • 我已经向 Google 提出了一个功能请求:issuetracker.google.com/issues/62543492
  • 你为什么要局限于库实现?您不想测试 JobScheduler 是否按预期工作,对吗?因为那不是你的工作。相反,模拟 jobParams 并在您的 AsyncTask 上执行断言,那里有什么问题?
  • 我想测试我的代码和 JobScheduler 的交互方式,这与测试 JobScheduler 的工作原理完全不同。这与想要测试 Activity 的整个生命周期没有什么不同。

标签: android android-jobscheduler


【解决方案1】:

感谢 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多