Quand je regarde les exemples de la classe Assert JavaDoc
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
Je ne vois pas un grand avantage sur, disons que, assertEquals( 0, 1 )
.
C'est bien peut-être pour les messages si les constructions deviennent plus compliquées mais voyez-vous plus d'avantages? Lisibilité?
assertTrue
avec un&&
. Le séparer en deux conditions rend la cause du problème évidente même dans JUnit. Ne vous méprenez pas; Je suis d'accord avec vous, je n'aime pas votre exemple.Les notes de publication de JUnit pour la version 4.4 (où il a été introduit) présentent quatre avantages:
Argumentation plus détaillée du type qui a créé la nouvelle syntaxe: ici .
la source
Fondamentalement, pour augmenter la lisibilité du code .
Outre hamcrest, vous pouvez également utiliser les assertions fest . Ils présentent quelques avantages par rapport à hamcrest tels que:
(
assertEquals(123, actual); // reads "assert equals 123 is actual"
vsassertThat(actual).isEqualTo(123); // reads "assert that actual is equal to 123")
Quelques exemples
Mise à jour du 17 octobre 2016
Fest n'est plus actif, utilisez AssertJ à la place.
la source
Une justification très basique est qu'il est difficile de gâcher la nouvelle syntaxe.
Supposons qu'une valeur particulière, foo, devrait être 1 après un test.
--OU--
Avec la première approche, il est très facile d'oublier l'ordre correct et de le saisir à l'envers. Alors plutôt que de dire que le test a échoué parce qu'il attendait 1 et obtenait 2, le message est inversé. Pas de problème lorsque le test réussit, mais peut prêter à confusion lorsque le test échoue.
Avec la deuxième version, il est presque impossible de faire cette erreur.
la source
Exemple:
btw: vous pouvez aussi écrire du texte dans assertXXX ...
la source
assertThat
cas, car le message que vous recevez automatiquement est tout aussi informatif: "Attendu: (une valeur supérieure à <1> et une valeur inférieure à <3>)"Est proche du langage naturel.
Code plus facile à lire et à analyser. Le programmeur passe plus de temps à analyser le code qu'à en écrire un nouveau. Donc, si le code est facile à analyser, le développeur devrait être plus productif.
Le code PS doit être un livre aussi bien écrit. Code auto-documenté.
la source
il y a des avantages à affirmer que par rapport à assertEquals -
1) plus lisible
2) plus d'informations sur l'échec
3) des erreurs de temps de compilation - plutôt que des erreurs d'exécution
4) flexibilité avec l'écriture des conditions de test
5) portable - si vous utilisez hamcrest - vous pouvez utiliser jUnit ou TestNG comme cadre sous-jacent.
la source