AssertJ 3.0.0 for Java 8
AssertJ est enfin sorti avec le support de Java8.
Je le considère comme le meilleur outil de tests unitaires pour Java. Son approche est la suivante : une assertion doit être lisible par un humain.
Pour vous en faire la démonstration, je vais vous montrer plusieurs exemples avec assertJ, en les comparant avec les assertions Junit.
Exemples
Boolean check
Junit
AssertJ
List checks
Supposons cette liste :
Si je veux vérifier que les éléments sont bien présents
Junit
AssertJ
Et je ne vous montre que le containsExactly
, il en existe plein d’autres (containsOnly, containsSubsequence, …).
DRY & KISS
C’est vraiment ce que j’apprécie dans cette librairie : tout a été pensé pour que l’on ne perde pas de temps dans nos asserts.
Et quand on se retrouve avec des cas tordus1, il y’a la possibilité de définir vos propres assertions (il y’a même un générateur pour ça).
Et Java 8 dans tout ça ?
La version 3.0.0 d’AssertJ fonctionne avec Java 8 et apporte son lot de sucre syntaxique.
Vous pouvez jeter un oeil sur la release note.
Date/Time assertions
Regardez les exemples de la release note, il n’y a rien à rajouter, c’est parfait, tout est là.
Exceptions
Junit
Avec Junit, plusieurs choix, soit :
- on catch et on assert (Berk)
- on marque dans l’annotation @Test que l’on attend une exception (Re-Berk, on ne sait pas si l’exception a été lancée par ce qu’on voulait, ou par du code au dessus)
- on utilise la Rule ExpectedException
AssertJ 3
Maintenant, on est capable de séparer le “When” du “Then”, chose qui n’était avant possible qu’en faisant un try-catch.
Optionals
Junit
AssertJ 3
Approximation des primitives
Je ne suis pas sûr de l’utilité de celle là, d’un côté je pense que si on n’est pas capable de déterminer la sortie exacte d’un test, c’est qu’on a un problème. De l’autre, je me dis que ça peut être super, par exemple quand on fait des tests avec des nombres pseudo-aléatoires.
Bref, ça donne ça :
matches
Celui là peut être super, ou super dangereux.
Voici l’exemple de la release note:
Si on change l’âge de frodo à ‘25’ l’erreur remontée est la suivante :
Je sais pas vous, mais moi je préfère ça :
Ce qui est donné par les asserts suivant :
Bilan
C’est une super bonne nouvelle, surtout pour les dates, les exceptions et les optionals. Pour les autres, je suis plus mitigé, à voir à l’usage.
Et vous, vous en pensez quoi ?
-
C’est peut-être un problème de conception ? ↩