Verifying Datetime and Date With Hamcrest
The hamcrest-date library is a great tool for verifying dates in JUnit tests with Hamcrest.
Join the DZone community and get the full member experience.
Join For FreeIf you belong to healthier part of the Java development community and you're practicing unit testing on daily basis, you are probably are aware of the Hamcrest Java library. It can make your tests much more readable. Its architecture is very modular and is used by various other testing libraries.
A major part of its flexibility is it concept of a Matcher. I am not going to dive into this concept now. If you are not familiar, just take a quick look at the Hamcrest tutorial. One of the matchers you can plug into your testing toolbox is the library hamcrest-date. With this library we can easily test that a date was generated within certain range:
@Test
public void validateDate() {
//GIVEN
Date expectedDate = new Date();
//WHEN
Date actualDate = new Date();
//THEN
assertThat(actualDate, DateMatchers.within(2, ChronoUnit.SECONDS, expectedDate));
}
We can also do this for Java 8 types:
@Test
public void validateDateTime() {
//GIVEN
LocalDateTime expectedDateTime = LocalDateTime.now();
//WHEN
LocalDateTime actualDateTime = LocalDateTime.now();
//THEN
assertThat(actualDateTime, LocalDateTimeMatchers.within(2, ChronoUnit.SECONDS, expectedDateTime));
}
Or pick from various exotic verifications the hamcrest-core library provides:
@Test
public void validateZonedDateTime() {
//GIVEN
ZonedDateTime expectedDateTime = ZonedDateTime.of(2016, 3, 20, 13, 3, 0, 0, ZoneId.of("GMT+1"));
//WHEN
ZonedDateTime actualDateTime = ZonedDateTime.of(2016, 3, 20, 13, 3, 0, 0, ZoneId.of("GMT-0"));
//THEN
assertThat(actualDateTime, ZonedDateTimeMatchers.sameDay(expectedDateTime));
assertThat(actualDateTime, ZonedDateTimeMatchers.after(expectedDateTime));
assertThat(actualDateTime, ZonedDateTimeMatchers.isSunday());
assertThat(actualDateTime, ZonedDateTimeMatchers.isMarch());
}
Kudos to the creator of this nice little library. This example is hosted in Github.
Published at DZone with permission of Lubos Krnac, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments