2016-05-31 11 views
1

Ich schreibe einen JUnit-Test für eine Java-Variable, die ArrayList<Double> ist. Die Komplikation ist, dass meine erwarteten Werte einfache Genauigkeit sind, während Javas Double doppelte Genauigkeit ist. So passiert assertEquals(expected_array_list, actual_array_list) nicht aufgrund von Präzisionsfehlern.Java Junit4: assertEquals für ArrayList <Double> mit einfach erwarteten Genauigkeitswerten

Mein Work-Around ist, über alle Elemente und assertEquals jedes Doppelpaar zu iterieren, den epsilon Wert auf einen geeigneten Wert zu setzen. Gibt es eine Methode, die epsilon für die gesamte ArrayList einzustellen, anstatt sie in ihre Elemente zu zerlegen?

+0

Sie könnten eine eigene Methode implementieren, die die erwartete Doppel und der tatsächliche Doppel Wert bekommt. Dann können Sie die Werte in dieser Methode fortführen. –

Antwort

4

JUnit 4.6 und höher hat eine bequeme Methode assertArrayEquals(double[] expected, double[] actual, double delta) Methode (mit einer überladenen Variante für eine String Nachricht, wie in der Norm). In Java 8, könnten Sie diese List s zu primitiven Arrays ziemlich leicht umwandeln und es einfach verwenden:

double delta = 0.05; // or any other reasonable value 
double[] expectedArray = 
    expectedList.stream().mapToDouble(Double::doubleValue).toArray(); 
double[] actualArray = 
    actualList.stream().mapToDouble(Double::doubleValue).toArray(); 
assertArrayEqulas(expectedArray, actualArray, delta); 
+0

Ich denke, Junit 4.1 hat eine assertArrayEquals-Methode mit Delta ... – RoiEX

+1

@RoieX Sie Sir, sind [fast] korrekt. Nach einem zweiten Blick sehe ich, dass diese Methode in JUnit 4.6 hinzugefügt wurde (eingeführt von commit 41cbbf7e228b8f7908e672a79863ff970316b120). Nicht sicher, warum ich es ursprünglich vermisst habe. Ich schaute wahrscheinlich auf veralteten Javadoc, Schande über mich. Ich habe meine Antwort mit diesen Informationen bearbeitet. – Mureinik

+0

Btw, es ist wahrscheinlich einfacher 'expectedList.toArray (new double [expectedList.size()])' zu machen, um ein Array einer Liste zu erhalten – RoiEX