2012-05-16 5 views
11

Ich möchte zwei Arrays von Doppel vergleichen. Mit Vanille JUnit, kann ich:Wie kann ich Hamcrest verwenden, um zu überprüfen, ob jedes Element in einem Array von Doppelpunkten jedem Element in einem anderen Array "nahe" ist?

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); 

Ich mag würde wissen, wie dies mit hamcrest zu tun, vorzugsweise ohne individuellen Matchers zu schaffen (wenn möglich). Etwas Ähnliches wie die Verwendung des "close" Matcher für jedes Element in einem Array.

Antwort

9

Wenn Sie a zu einem Double[] ändern, dann können Sie assertThat(a, arrayCloseTo(b, .2)); mit dieser Hilfsmethode tun:

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); 
} 

Sie es mit einem primitiven Array tun können, als auch, aber Sie werden eine benutzerdefinierte Matcher dafür brauchen.