春季测试@Scheduled
2022-08-31 19:39:32
Spring提供了使用注释以特定时间间隔安排和执行任务的可能性,例如@Scheduled
有没有一种方便的方法来单元测试此行为?
当然,我可以自己调用bean的方法,但我想确保我不会遇到由于配置错误等原因导致多次执行等问题。
其他框架提供了自己快进时间的可能性。一个例子是Activiti,您可以在其中调用
org.activiti.engine.impl.util.ClockUtil.setCurrentTime(date)
以快进框架使用的时间。
春天有类似的东西吗?
从本质上讲,我想做的是在单元测试中这样做(使用SpringJUnit4ClassRunner
)
@Test public void testTaskScheduling() {
assertThat(someOtherBean.getSomeProperty(), is(equalTo(whatIinitiallyExpect)));
SpringClockUtil.setDate(dateInTwoHours)// This is what I am missing
SpringTaskExecutor.executeAllScheduledTasks() // Also missing
assertThat(someOtherBean.getSomeProperty(), is(equalTo(whatIexpectNow)));
}