鉴于:
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));
此外,最好避免将数组转换为列表。
答案 0 :(得分:23)
assertThat(Arrays.asList(a), everyItem(isIn(b)));
这会检查a
中是否包含b
的每个项目。确保a
和b
的类型为Integer[]
,否则可能会出现意外结果。
在最新版本中,将isIn
替换为in
,因为第一个has been deprecated。
答案 1 :(得分:2)
通过扩展org.hamcrest.TypeSafeMatcher
创建您自己的自定义匹配器,并在assertThat()
方法中使用它。您可以参考org.hamcrest.collection.IsArrayContaining
的代码并创建自己的匹配器
答案 2 :(得分:0)
如果assertj是您的选项:
assertThat(b).contains(a); // order doesn't matter
assertThat(b).containsSequence(a); // order matters