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

Verify, standardize, and correct the Big 4 + more– name, email, phone and global addresses – try our Data Quality APIs now at Melissa Developer Portal!

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.

Developers! Quickly and easily gain access to the tools and information you need! Explore, test and combine our data quality APIs at Melissa Developer Portal – home to tools that save time and boost revenue. Our APIs verify, standardize, and correct the Big 4 + more – name, email, phone and global addresses – to ensure accurate delivery, prevent blacklisting and identify risks in real-time.

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 }}