Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Verifying Datetime and Date With Hamcrest

DZone's Guide to

Verifying Datetime and Date With Hamcrest

The hamcrest-date library is a great tool for verifying dates in JUnit tests with Hamcrest.

· Java Zone ·
Free Resource

Bring content to any platform with the open-source BloomReach CMS. Try for free.

Since I started diving into automated testing and practicing TDD, verification of date values has been a  pain. Luckily there is a nice library for legacy Date and new Java 8 DateTime APIs, which cures this pain.

If 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.

BloomReach CMS: the API-first CMS of the future. Open-source & enterprise-grade. - As a Java developer, you will feel at home using Maven builds and your favorite IDE (e.g. Eclipse or IntelliJ) and continuous integration server (e.g. Jenkins). Manage your Java objects using Spring Framework, write your templates in JSP or Freemarker. Try for free.

Topics:
java ,junit ,hamcrest

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}