2013-08-21 15 views
18

Hamcrest funziona bene per i tipi di dati di base a causa di boxe automatica e unboxing come in questo caso:Uso matchers hamcrest con array di tipo primitivo

assertThat(1, is(1)); 

Tuttavia, desidero utilizzare hasItemInArray matcher di hamcrest con un array di tipo primitivo in questo modo:

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

Poiché non v'è la boxe automatica/unboxing per gli array di tipi di dati primitivi il codice di cui sopra non viene compilato. Esiste un modo preferito per realizzare quanto sopra, oltre alla conversione manuale da int[] a Integer[]?

risposta

11

AFAIK non esiste un modo automatico per raggiungere questo obiettivo. Se si può fare uso di librerie 3rd party si potrebbe voler controllare la libreria Apache Commons Lang che fornisce una classe ArrayUtils con un metodo di conversione:

Integer[] toObject(int[] array)

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

Ho già indovinato, ma grazie per la conferma e indicandomi ad Apache Commons! – k13n

0

Eppure un'alternativa a scrivere il proprio matcher sarebbe per usarne uno in una libreria di abbinamenti come conmatch.

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

Suppongo che ci siano già altri Matcher disponibili su github.

Problemi correlati