Dans Junit 4, voyez-vous un inconvénient à lancer un ComparisonFailure
au lieu d’un AssertionError
cas de défaillance de assertEquals (Object, Object)?
assertEquals (Object, Object) jette
ComparisonFailure
si les valeurs attendues et réelles sont des chaînes AssertionError
si ce n’est pas une chaîne AssertionError
message AssertionError
est déjà de la forme
"expected: but was <"+ actual.toString()
(via Ssortingng.valueOf
, voir ci-dessous la méthode junit-4.8.2 appelée par Assert.assertEquals (Object, Object) pour créer le message AssertionError):
static Ssortingng format(Object expected, Object actual) { ... Ssortingng expectedSsortingng= Ssortingng.valueOf(expected); Ssortingng actualSsortingng= Ssortingng.valueOf(actual); ... return formatted+"expected: but was:";
ComparisonFailure
fournit un moyen beaucoup plus lisible de repérer les différences dans la boîte de dialog d’éclipse ou d’ Intellij IDEA (FEST-Assert lève cette exception)
[Mise à jour: question modifiée pour se concentrer sur la discussion ComparisonFailure / AssertionError.]
Nous avons commencé par comparer les chaînes car il était évident de rendre le message d’erreur plus utile. Nous n’avons jamais étendu ComparisonFailure à des objects généraux car il n’était pas clair comment procéder de manière générale. Comme d’autres l’ont suggéré, n’hésitez pas à append des assertions spéciales si vous pouvez fournir de meilleurs messages d’erreur ou passer à Hamcrest, qui fournit un mécanisme général pour append des messages d’échec utiles.
Cordialement,
Kent
Je pense que vous pouvez certainement écrire votre propre méthode substitut assertEquals pour le faire sans aucun problème significatif, si cela vous convient.
Cependant, dans le cas général (du sharepoint vue des développeurs de framework), est-ce une bonne idée, je ne suis pas sûr. Souvent, les objects en échec n’auront pas d’implémentation toSsortingng, le message d’échec de l’EDI étant alors très trompeur. Vous auriez l’impression que la comparaison portait sur l’identité de référence, alors que ce n’était peut-être pas le cas.
En d’autres termes, il est utile que les objects aient une implémentation toSsortingng significative, sinon ce n’est peut-être pas le cas.
Je suis d’accord avec l’implémentation actuelle de JUnit, avec deux classes d’exception. Principalement parce que cela nous permet de différencier les problèmes de comparaison ( ComparisonFailure
) des problèmes d’incompatibilité de type “plus graves” ( AssertionError
).
En général, un message texte à l’intérieur d’une Exception
est juste une aide pour un être humain et n’est pas destiné à être touché par aucun outil logiciel. C’est pourquoi le type d’exception levée est le seul indicateur du problème survenu.