Mockito - überprüfen Sie, ob ein double-Wert
Habe ich eine Methode method1, nimmt ein Doppel -, die aufgerufen wird, auf myManager
Ich leite in dieser 65.888 * 60. Wenn ich versuche dies überprüfen, ich bekomme floating-point-Probleme. Die überprüfung fehlschlägt. Es erwartet 3953.28 aber 3953.280029296875
verify(myManager, times(1)).method1(65.888 * 60d);
Gibt es trotzdem kann ich dieses überprüfen, tun ein fuzzy-check für floating-point-Prüfung. Viel wie Sie tun, mit assertEquals wo geben Sie ein delta am Ende.
Dank
- Nicht sicher, aber wie in der api angegeben überprüfen, nicht eine Kontrolle über das Ergebnis. Überprüfen Sie nicht nur: Überprüft ein bestimmtes Verhalten einmal passiert. Also, wo ist der code, den Sie sind, den Vergleich der tatsächlichen und den erwarteten Wert?
- Es ist mockito, das tut der Vergleich. Es ist zu überprüfen, dass die Methode aufgerufen wird, mit x, sondern von y (wegen der floating-point-problem). Die überprüfung erfolgt irgendwo im code mockito
- Könnten Sie das ganze test-Fall. Weil, normalerweise gibt es einen deutlichen Unterschied. Setzt man einen Wert (test-Status), und überprüfen Sie die Anrufung geschah (test-Interaktion). Man könnte auch schreiben
verify(myManager, times(1)).method1(anyDouble());
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie erfassen den Wert, z.B.
Dann behaupten:
Oder vielleicht verwenden Sie ein argument matcher, die die Behauptung:
Update:
Anstelle von entweder der oben beschriebenen Methoden, die Sie nutzen könnten
AdditionalMatchers.eq(double, double)
statt, z.B.:Obwohl die Verwendung
AdditonalMatchers
Matcher mit bedacht, wie in der Dokumentation:AdditonalMatchers
wird nicht empfohlen. Der zweite Weg ist besser lesbar in der Tat, so was ist der Punkt, die Anreize für Leute, die esAdditionalMatchers.eq(expected, delta)
sollte verwendet werden, über die standard-floating-point entspricht. Es ist fast nie eine gute Idee, um zu vergleichendouble
oderfloat
direkt. AuchJUnit
'sassertEquals(expected,value)
ist veraltet, zu Gunsten der Vergleich der Methode mit einemdelta
Wert.Es ist ein Hamcrest matcher, die ist perfekt für diese.
So könnte man etwas schreiben wie
Übrigens, Sie nicht immer schreiben müssen
times(1)
im Mockitoverify
, da dies der Standard-Typ vonverify
dass Mockito gibt Sie.Folgende code funktioniert für mich:
Vielleicht sollten Sie stattdessen rufen Sie die Methode mit anyDouble() oder verwenden Sie folgende Matcher: http://hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/number/IsCloseTo.html
Was ist mit: