2013-08-21 2 views
18

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

assertThat(1, is(1)); 

Однако, я хотел бы использовать hasItemInArray Искателя Hamcrest с массивом примитивного типа как это:

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

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

ответ

11

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

Integer[] toObject(int[] array)

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

Я уже догадался, но спасибо за подтверждение и указал мне на Apache Commons! – k13n

0

Yet альтернатива написания собственных Искателя будет использовать его в библиотеке-подборщике, например conmatch.

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

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

Смежные вопросы