Подтвердить что ты не робот

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));

Кроме того, предпочтительно избегать преобразования массива в список.

4b9b3361

Ответ 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