hamcrest:如何匹配数组是另一个数组的子集?

Kir*_*han 15 java junit hamcrest

鉴于:

int[] a = {1, 2, 3, 4};
int[] b = {1, 2, 3, 4, 5};
Run Code Online (Sandbox Code Playgroud)

如何使用hamcrest匹配器将"a"作为"b"的子集?

以下作品

assertThat(Arrays.asList(b), hasItems(a));
Run Code Online (Sandbox Code Playgroud)

但是由于我从"b"创建"a",我宁愿将"a"上的断言应用为值.就像是

assertThat(a, isSubsetOf(b));
Run Code Online (Sandbox Code Playgroud)

另外,最好避免将阵列转换为列表.

eee*_*eee 23

您可以使用EveryIsIn匹配器的组合:

assertThat(Arrays.asList(a), everyItem(isIn(b)));
Run Code Online (Sandbox Code Playgroud)

这会检查是否a包含每个项目b.确保a并且b属于类型,Integer[]否则您可能会得到意想不到的结果.

在最新版本中,替换isInin,因为第一个版本已被弃用.