hamcrest: how to match array is subset of another array?

hamcrest, java, junit

Solution

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`.

Problem

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.

Original source