hasProperty, the Hidden Gem of Hamcrest (and assertThat)
If you got used to JUnit 4's
The advantage of
Example - check that collection contains two Images with some file names:
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:
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:
- An overview of Hamcrest matchers
- Another blog about hasProperty and all too common issues with generics in Hamcrest
- Fest-Assert's extractProperty