Hamcrest: как сопоставить массив - это подмножество другого массива?
Учитывая, что:
int[] a = {1, 2, 3, 4};
int[] b = {1, 2, 3, 4, 5};
Как утверждать, что "a" является подмножеством "b" с использованием сопоставлений hamcrest?
Следующие работы
assertThat(Arrays.asList(b), hasItems(a));
Но так как я создаю "a" из "b", я бы предпочел применять утверждения "a" в качестве значения.
Что-то вроде
assertThat(a, isSubsetOf(b));
Кроме того, предпочтительно избегать преобразования массива в список.
Ответы
Ответ 1
Вы можете использовать комбинацию Every
и IsIn
:
assertThat(Arrays.asList(a), everyItem(isIn(b)));
Это проверяет, содержится ли каждый элемент a
в b
. Убедитесь, что a
и b
имеют тип Integer[]
, иначе вы можете получить неожиданные результаты.
В последней версии замените IsIn
на in
, так как первый устарел.
Ответ 2
Создайте собственный пользовательский соединитель, расширив org.hamcrest.TypeSafeMatcher
и используйте его в методе assertThat()
. Вы можете ссылаться на код org.hamcrest.collection.IsArrayContaining
и создать свой собственный матчи
Ответ 3
Если assertj является для вас вариантом:
assertThat(b).contains(a); // order doesn't matter
assertThat(b).containsSequence(a); // order matters