The Holy Java

Building the right thing, building it right, fast

hasProperty, the Hidden Gem of Hamcrest (and assertThat)

Posted by Jakub Holý on October 15, 2011

If you got used to JUnit 4′s assertThat with various matchers (of course you will need junit-dep.jar and hamcrest.jar to get the full set instead of the small subset integrated in junit.jar), make sure you don’t overlook the matcher hasProperty. It is very useful if you have non-trivial objects and cannot use some more flexible language like Groovy for your unit tests.

The advantage of hasProperty is that it allows you to check a particular property (or more properties with allOf) of an object while ignoring the others – pretty useful if the object has 20 properties and checking just one is enough for you. (Admittedly, an object with 20 properties is an abomination but hey, that’s the real legacy word!)

Example – check that collection contains two Images with some file names:

assertThat("Expected images", (Iterable<Object>) hotel.getImages()
  , containsInAnyOrder(hasProperty("filename", is("radisson1.jpg"))
     , hasProperty("filename", is("radisson2.jpg"))));

The failure message in this case isn’t as clear as I might wish but still this is the best solution I can think of.

Related:

About these ads

Sorry, the comment form is closed at this time.

 
%d bloggers like this: