Использование сочетаний hamcrest с массивами примитивных типов
Hamcrest хорошо работает для примитивных типов данных из-за автоматического бокса и распаковки, как в этом случае:
assertThat(1, is(1));
Однако, я хотел бы использовать hamcrest hasItemInArray
matcher с массивом примитивного типа следующим образом:
int[] values = someMethodCall();
assertThat(values, hasItemInArray(1));
Так как нет автоматического бокса/распаковки для массивов примитивных типов данных, вышеуказанный код не компилируется. Есть ли какой-либо предпочтительный способ выполнения вышеуказанного, кроме преобразования вручную с int[]
на Integer[]
?
Ответы
Ответ 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.