Nous avons une suite de tests qui utilise principalement les assertions JUnit avec les matchers Hamcrest. Un membre de notre équipe a commencé à expérimenter avec AssertJ et a impressionné les gens par sa syntaxe, sa flexibilité et son caractère déclaratif. Il existe une fonctionnalité fournie par JUnit pour laquelle je ne trouve pas d'équivalent dans AssertJ: l'ajout d'un message d'échec d'assertion personnalisé.
Nous comparons souvent des objets qui ne sont pas conçus pour la lisibilité humaine et qui auront des identifiants ou des UUID apparaissant au hasard et il est impossible de dire ce qu'ils sont censés être par les données qu'ils contiennent. C'est une situation inévitable pour notre base de code, malheureusement, dans le cadre de l'objectif qu'elle remplit est de mapper des données entre d'autres services sans nécessairement comprendre de quoi il s'agit.
Dans JUnit, la assertThat
méthode fournit une version avec un String reason
paramètre avant le Matcher<T>
param. Cela rend trivial l'ajout d'une courte chaîne de débogage éclairant le problème, comme ce que la comparaison devrait signifier pour un humain.
AssertJ, d'autre part, fournit un jillion de méthodes génériquesstatic assertThat
différentes qui renvoient une certaine forme d' interface Assert ou l'une de ses nombreuses classes d'implémentation. Cette interface ne fournit pas de méthode standard pour définir un message personnalisé à inclure avec les échecs.
Existe-t-il un moyen d'obtenir cette fonctionnalité à partir de l'API AssertJ ou de l'une de ses extensions sans avoir à créer une classe d'assert personnalisée pour chaque type d'assert auquel nous voulons ajouter des messages?
withFailMessage
matière; J'aime AssertJ, mais ça craint.