首页 > 解决方案 > 如何使用 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();

这些都没有导致计划任务的执行。任何想法如何强制/控制我的计划任务的执行而不在我的生产代码中添加辅助方法?

标签: androidunit-testingrobolectric

解决方案


Robolectric 似乎不支持 ScheduledExecutorService。尝试使用 RoboExecutorService。


推荐阅读