Spring offers the possibility to schedule and execute tasks at specific intervals using annotations, e.g. @Scheduled
Is there a convenient way to unit test this behavior?
Of course I could call the method of the bean myself, but I want to make sure I don't run into problems like multiple executions due to misconfiguration and so on.
Other frameworks offer the possibility to fast forward the time yourself. One example is Activiti where you can call
org.activiti.engine.impl.util.ClockUtil.setCurrentTime(date)
to fast forward the time used by the framework.
Is there something comparable in Spring?
Essentially what I want to do is something like this in a unit test (run using 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)));
}