2012-05-16 4 views
11

Vorrei confrontare due array di doppi. Utilizzando JUnit vaniglia, che posso fare:Come posso usare Hamcrest per verificare se ogni elemento in una matrice di doppi è "vicino" a ciascun elemento in un altro array?

double[] a = new double[]{1.0, 2.0, 3.0}; 
double[] b = new double[]{1.0, 2.0, 3.0}; 
assertEquals(a, b, 1e-10); 

vorrei sapere come fare ciò utilizzando Hamcrest, preferibilmente senza creare Matchers personalizzati (se possibile). Qualcosa di simile a usare il matcher "vicino" per ogni elemento in un array.

risposta

9

Se si modifica a ad un Double[] allora si può fare assertThat(a, arrayCloseTo(b, .2)); con questo metodo di supporto:

public static Matcher<Double[]> arrayCloseTo(double[] array, double error) { 
    List<Matcher<? super Double>> matchers = new ArrayList<Matcher<? super Double>>(); 
    for (double d : array) 
     matchers.add(closeTo(d, error)); 
    return arrayContaining(matchers); 
} 

si può fare con una matrice primitiva come bene, ma avrete bisogno di un matcher personalizzato per questo.