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

问题描述 投票:1回答:1

我想与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();

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

android unit-testing robolectric
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.