Hamcrest contains() is weird
·1 min
I have been using Hamcrest in Java for as long as I can remember. I love using it because it’s much more powerful than native JUnit assertions, and the assertions read much easier. So instead of this:
assertEquals(actual, expected);
We get:
assertThat(actual, is(expected));
Yeah, it’s actually more keystrokes, but that’s Java’s thing 😎.
My favorite part about Hamcrest is using it for asserting on items in collections, but the behavior of the contains()
matcher can be quite odd. Say you have a list [A, B]
and you store it in a variable list
. If you run
assertThat(list, contains("A"));
The assertion will actually fail - this is because the contains()
matcher actually means containsExactly()
. I use this custom assertion as a convenience:
public static void <T> containsExactly(T... members) {
contains(members);
}