Given that:
int[] a = {1, 2, 3, 4};
int[] b = {1, 2, 3, 4, 5};
How to asser that "a" is a subset of "b" using hamcrest matchers?
The following works
assertThat(Arrays.asList(b), hasItems(a));
But since I am creating "a" from "b", I would prefer to apply the asserts on "a" as the value. Something like
assertThat(a, isSubsetOf(b));
Additionally it is preferable to avoid converting the array to a list.
Hamcrest is a framework for writing matcher objects allowing 'match' rules to be defined declaratively. There are a number of situations where matchers are invaluable, such as UI validation or data filtering, but it is in the area of writing flexible tests that matchers are most commonly used.
You can use a combination of the Every
and IsIn
matcher:
assertThat(Arrays.asList(a), everyItem(in(b)));
This does check if every item of a
is contained in b
. Make sure a
and b
are of type Integer[]
otherwise you might get unexpected results.
If you are using an older version of hamcrest (for example 1.3) you can use the following:
assertThat(Arrays.asList(a), everyItem(isIn(b)));
In the latest version isIn
is deprecated in favor of in
.
Create your own custom matcher by extending org.hamcrest.TypeSafeMatcher
and use it in the assertThat()
method. You can refer the code of org.hamcrest.collection.IsArrayContaining
and create your own matcher
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With