android - 如何使用 Robolectric 触发发布到 ScheduledExecutorService 的延迟任务
问题描述
我想使用 Robolectric 进行集成测试,我需要在ScheduledExecutorService
. 假设我使用以下代码定期执行我的任务:
ScheduledExecutorService delayedExecutor = Executors.newSingleThreadScheduledExecutor();
delayedExecutor.scheduleWithFixedDelay(storeStateTask, 60, 60, TimeUnit.SECONDS);
在我的 robolectric 测试中,我尝试执行以下代码的组合来提前内部时间或执行挂起的任务:
Robolectric.getBackgroundThreadScheduler().advanceBy(61, TimeUnit.SECONDS);
Robolectric.getForegroundThreadScheduler().advanceBy(61, TimeUnit.SECONDS);
Robolectric.flushForegroundThreadScheduler();
Robolectric.flushBackgroundThreadScheduler();
ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
shadowOf(context.getMainLooper()).idle();
这些都没有导致计划任务的执行。任何想法如何强制/控制我的计划任务的执行而不在我的生产代码中添加辅助方法?
解决方案
Robolectric 似乎不支持 ScheduledExecutorService。尝试使用 RoboExecutorService。
推荐阅读
- javascript - 在条件下更改对象的属性
- java - 使用 Gson Response.body() 进行改造不起作用
- laravel - 查询最近的关系,创建帐户的时间
- java - 如何在 Java 中解析 DialogFlow 日期(@sys.time-period)
- domain-driven-design - 创建过程复杂的 DDD 实体
- jquery - Laravel - JQuery 下拉显示未按预期工作
- node.js - 谷歌(Firebase)函数响应为 static.js
- css - 封面图像在不同屏幕尺寸上调整大小 - 一个问题
- swift - 带圆角的 CALayer 显示黑色或外来内容
- c# - C# bruteforce 应用程序在调试时不打印任何内容,并在密码长度超过 1 个字母时终止