Moving time backwards in Spring Boot tests
Our code executes business logic and performs validations to ensure the system is working correctly. For a given input, we may enforce Date fields are within specific time intervals. Can we write tests to validate such conditions for a given date in the past?
4 min readJul 24, 2023
In the Groundhog Day movie, the character is trapped in a time loop and I suppose we have a similar kind of control of what happens with the code we write.
Our application defines a singleton Clock
bean to get the current time as java.time.Instant
instances where needed.
@Configuration
public class TimeConfig {
@Bean
public Clock clock() {
return Clock.systemUTC();
}
}
We will define a simple service receiving an input and returning an output.
@Service
@Validated
public static class InputService {
public Output process(@Valid Input input) {
return new Output(input.name());
}
record Input(String name, @InFuture Instant time) {}
record Output(String name) {}
}
The Validated
annotation on the service class level makes sure the framework performs the validation for the input parameter. It…