Current Instant Listeners
Current instant listeners​
Sometimes you may want to use the now static functions located in java.time classes for multiple reasons, such as setting the creation date of an entity
data class MyEntity(creationDate: LocalDateTime = LocalDateTime.now()).
But what to do when you want to test that value? now will be different
each time you call it!
For that, Kotest provides ConstantNowListener and withConstantNow functions.
While executing your code, your now will always be the value that you want to test against.
val foreverNow = LocalDateTime.now()
withConstantNow(foreverNow) {
LocalDateTime.now() shouldBe foreverNow
delay(10) // Code is taking a small amount of time to execute, but `now` changed!
LocalDateTime.now() shouldBe foreverNow
}
Or, with a listener for all the tests:
override fun listeners() = listOf(
ConstantNowTestListener(foreverNow)
)
withContantNow and ConstantNowTestListener are very sensitive to race conditions. Using them, mocks the static method now which is global to the whole JVM instance,
if you're using it while running test in parallel, the results may be inconsistent.