Reputation: 2996
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.
Upvotes: 17
Views: 6562
Reputation: 3458
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
.
Upvotes: 26
Reputation: 3165
If assertj is an option for you:
assertThat(b).contains(a); // order doesn't matter
assertThat(b).containsSequence(a); // order matters
Upvotes: 1
Reputation: 3625
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
Upvotes: 2