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

Использование сочетаний hamcrest с массивами примитивных типов

Hamcrest хорошо работает для примитивных типов данных из-за автоматического бокса и распаковки, как в этом случае:

assertThat(1, is(1));

Однако, я хотел бы использовать hamcrest hasItemInArray matcher с массивом примитивного типа следующим образом:

int[] values = someMethodCall();
assertThat(values, hasItemInArray(1));

Так как нет автоматического бокса/распаковки для массивов примитивных типов данных, вышеуказанный код не компилируется. Есть ли какой-либо предпочтительный способ выполнения вышеуказанного, кроме преобразования вручную с int[] на Integer[]?

4b9b3361

Ответ 1

AFAIK нет автоматического способа достижения этого. Если вы можете использовать сторонние библиотеки, вы можете проверить библиотеку Apache Commons Lang, которая предоставляет ArrayUtils класс с методом преобразования:

Integer [] toObject (int [] array)

int[] values = someMethodCall();
Integer[] objValues = ArrayUtils.toObject(values);
assertThat(objValues , hasItemInArray(1));

Ответ 2

Однако альтернативой написанию собственного собеседника было бы использовать его в библиотеке-подборщике, например conmatch.

int[] values = someMethodCall();
assertThat(values, intArrayContaining(1));

Я думаю, что на github уже есть другие Matchers.