Wenn ich mir die Beispiele in der Assert-Klasse JavaDoc ansehe
assertThat("Help! Integers don't work", 0, is(1)); // fails:
// failure message:
// Help! Integers don't work
// expected: is <1>
// got value: <0>
assertThat("Zero is one", 0, is(not(1))) // passes
Ich sehe keinen großen Vorteil gegenüber, sagen wir mal assertEquals( 0, 1 )
.
Es ist vielleicht schön für die Nachrichten, wenn die Konstrukte komplizierter werden, aber sehen Sie mehr Vorteile? Lesbarkeit?
assertTrue
mit einem verwenden würde&&
. Die Aufteilung in zwei Bedingungen macht die Ursache des Problems selbst in JUnit offensichtlich. Versteh mich nicht falsch; Ich stimme dir zu, ich mag dein Beispiel einfach nicht.Die JUnit Release Notes für Version 4.4 (wo es eingeführt wurde) Zustand vier Vorteile:
Detailliertere Argumentation von dem Typ, der die neue Syntax erstellt hat: hier .
quelle
Grundsätzlich zur Verbesserung der Lesbarkeit des Codes .
Neben Hamcrest können Sie auch die Fest-Behauptungen verwenden . Sie haben einige Vorteile gegenüber Hamcrest wie:
(
assertEquals(123, actual); // reads "assert equals 123 is actual"
vs.assertThat(actual).isEqualTo(123); // reads "assert that actual is equal to 123")
Einige Beispiele
17. Oktober 2016 Update
Fest ist nicht mehr aktiv, benutze stattdessen AssertJ .
quelle
Eine sehr grundlegende Rechtfertigung ist, dass es schwierig ist, die neue Syntax durcheinander zu bringen.
Angenommen, ein bestimmter Wert, foo, sollte nach einem Test 1 sein.
--ODER--
Beim ersten Ansatz ist es sehr leicht, die richtige Reihenfolge zu vergessen und rückwärts einzugeben. Anstatt zu sagen, dass der Test fehlgeschlagen ist, weil er 1 erwartet und 2 erhalten hat, ist die Nachricht rückwärts. Kein Problem, wenn der Test bestanden wird, kann aber zu Verwirrung führen, wenn der Test fehlschlägt.
Mit der zweiten Version ist es fast unmöglich, diesen Fehler zu machen.
quelle
Beispiel:
Übrigens: Sie können auch Text in assertXXX schreiben ...
quelle
assertThat
FallIst nah an der natürlichen Sprache.
Einfacher zu lesen, Code einfacher zu analysieren. Programer verbringen mehr Zeit mit der Analyse von Code als mit dem Schreiben von neuem Code. Wenn Code einfach zu analysieren ist, sollte der Entwickler produktiver sein.
PS-Code sollte als gut geschriebenes Buch sein. Selbst dokumentierter Code.
quelle
Es gibt Vorteile gegenüber assertEquals -
1) besser lesbar
2) mehr Informationen zum Fehler
3) Kompilierungszeitfehler - anstatt Laufzeitfehler
4) Flexibilität beim Schreiben von Testbedingungen
5) portabel - wenn Sie hamcrest verwenden, können Sie jUnit verwenden oder TestNG als zugrunde liegendes Framework.
quelle