2016-06-21 7 views
0

sah ich die folgende Code-Snippet online:Order of Argument in beiden Junit und hamcrest

enter image description here

Wie erwähnt, das Argument der Reihenfolge der Junit (erwartet, tatsächlich) und hamcrest (tatsächliche, erwartete) ist rückgängig gemacht.

Ich fragte mich, was ist der Grund dafür? Spielt die Argumentordnung für Junit oder Hamcrest eine Rolle? Wenn jemand versehentlich das Argument in die falsche Reihenfolge gebracht hat, wird es sich auf das Ergebnis auswirken?

+2

Im Fall von junit, wenn Testfall fehlschlagen würde, würden Sie die umgekehrte Nachricht erhalten, dass "abc" erwartet wurde und "pqr" bekam, was in Wirklichkeit umgekehrt wäre. aber in Wirklichkeit macht es keinen Unterschied. – SMA

Antwort

1

Viele dieser Verwirrung geht weg, wenn Sie, dass Sie nur verwenden müssen assertThat realisieren. Diese Behauptung macht einfach das, was alle anderen tun; und es macht es viel besser.

Und nein, die Reihenfolge spielt keine Rolle. Am Ende geht es darum, zwei Werte zu vergleichen. Wenn die beiden Werte identisch sind, ist es dir egal.

Das einzige Problem: Wenn Sie Werte umkehren, dann könnten gebrochene Tests Fixierung härter sein - wie man besser die Differenz zwischen dem tatsächlichen und der erwartet Wert verstehen sollte.

Schließlich: Es gibt einen einfachen Helfer bei der Verwendung von assertThat. Es will A (ctual), dann E (erwartet). Sehr in alphabetischer Reihenfolge.

3

Nun, für Hamcrest sind die Typen eigentlich verschieden: die linke Seite ist ein Objekt, die rechte Seite ist ein Matcher.

Für jUnit ist der Unterschied "nur" Semantik - d. H. Sie erhalten eine irreführende Assert-Nachricht im Falle eines Fehlers.

Assertj (ein weiteres Beispiel hinzufügen) verwendet eine fließend-style-Schnittstelle:

assertThat(actual).isEqualTo(expected); 
assertThat(actual).isGreaterThan(expected); 
...