2012-05-16 21 views
11

Tôi muốn so sánh hai mảng tăng gấp đôi. Sử dụng vanilla JUnit, tôi có thể làm:Làm thế nào tôi có thể sử dụng Hamcrest để kiểm tra xem mỗi phần tử trong một mảng đôi là "đóng" cho mỗi phần tử trong mảng khác?

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

Tôi muốn biết cách thực hiện điều này bằng Hamcrest, tốt nhất là không tạo Matchers tùy chỉnh (nếu có thể). Một cái gì đó giống như sử dụng matcher "gần" cho mỗi phần tử trong một mảng.

Trả lời

9

Nếu bạn thay đổi a đến một Double[] sau đó bạn có thể làm assertThat(a, arrayCloseTo(b, .2)); với phương pháp helper này:

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

Bạn có thể làm điều đó với một mảng nguyên thủy là tốt, nhưng bạn sẽ cần một khớp tùy chỉnh cho điều đó.

Các vấn đề liên quan