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

2022-09-03 05:22:42

鉴于:

int[] a = {1, 2, 3, 4};
int[] b = {1, 2, 3, 4, 5};

如何使用hamcrest匹配器断言“a”是“b”的子集?

以下作品

assertThat(Arrays.asList(b), hasItems(a));

但是由于我从“b”创建“a”,因此我更愿意将“a”上的断言作为值。类似的东西

assertThat(a, isSubsetOf(b));

此外,最好避免将数组转换为列表。


答案 1

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

assertThat(Arrays.asList(a), everyItem(in(b)));

这将检查 是否包含 的每个项目。确保和类型,否则您可能会得到意外的结果。ababInteger[]

如果您使用的是较旧版本的hamcrest(例如1.3),则可以使用以下方法:

assertThat(Arrays.asList(a), everyItem(isIn(b)));

在最新版本中,isIn 已被弃用,取而代之的是 in


答案 2

通过扩展并在方法中使用它来创建自己的自定义匹配器。您可以参考代码并创建自己的匹配器org.hamcrest.TypeSafeMatcherassertThat()org.hamcrest.collection.IsArrayContaining


推荐