如何使用Robolectric触发发布到ScheduledExecutorService的延迟任务

时间:2019-05-16 06:46:08

标签: android unit-testing robolectric

我想与Robolectric进行集成测试,在此测试中,我需要在ScheduledExecutorService执行某些延迟的任务之后检查应用程序的状态。假设我使用以下代码定期执行任务:

ScheduledExecutorService delayedExecutor = Executors.newSingleThreadScheduledExecutor();
delayedExecutor.scheduleWithFixedDelay(storeStateTask, 60, 60, TimeUnit.SECONDS);

在我的机器人测试中,我尝试执行以下代码的组合以延长内部时间或执行待处理的任务:

Robolectric.getBackgroundThreadScheduler().advanceBy(61, TimeUnit.SECONDS);
Robolectric.getForegroundThreadScheduler().advanceBy(61, TimeUnit.SECONDS);
Robolectric.flushForegroundThreadScheduler();
Robolectric.flushBackgroundThreadScheduler();
ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
shadowOf(context.getMainLooper()).idle();

没有一个导致计划任务的执行。有什么想法可以在不向生产代码中添加辅助方法的情况下强制/控制计划任务的执行吗?

1 个答案:

答案 0 :(得分:0)

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