Skip to content

Latest commit

 

History

History
39 lines (31 loc) · 1.3 KB

File metadata and controls

39 lines (31 loc) · 1.3 KB

Utilities

Testing Time with MutableClock

When working with dates or time we often have the problem of writing stable tests. Java only provides a FixedClock for testing. However, often time related code has to deal with the change of time, so a fixed clock is not enough or makes the test harder to follow.

The prerequisite for using both FixedClock and Spocks MutableClock is that the production code, actually uses a configurable Clock and not just the parameterless Instant.now() or the corresponding methods in the other java.time.* classes.

Example

Class under Test
link:{sourcedir}/utilities/AgeFilter.java[role=include]
  1. Clock is injected via constructor

  2. Clock is used to get the current date

Test
link:{sourcedir}/utilities/MutableClockDocSpec.groovy[role=include]
  1. MutableClock created with a well known time

  2. Clock is injected via constructor

  3. age is less than 18 so the result is false

  4. the clock is advanced by one day

  5. age is equal to 18 so the result is true

There are many more ways to modify MutableClock just have a look at the JavaDocs, or the test code spock.util.time.MutableClockSpec.