Bonjour,
Le mot clef assert est très utile en Java pour construire du code "blindé". Cependant, il a un défaut, même utilisé à bon escient (par exemple, pour valider le contenu d'une méthode privée ou dénoncer un fait de programmation non respecté), c'est qu'il peut, en levant son Error, mettre en instabilité l'application. C'est potentiellement le cas notamment, lorsqu'elle est déployée sur un serveur d'applications ou web, parce ce que ces derniers ne vont pas nécessairement pouvoir exécuter tous les gestionnaires qu'ils devraient à l'issue de cette erreur, comme ils l'auraient fait si c'était une Exception.
Cela est normal car une Error provoque une demande de tout arrêter en urgence et immédiatement. Les conséquences sont donc parfois un peu trop lourdes. De fait, il peut y avoir des effets désagréables à la suite de la levée de cette Error.
L'utilisation de la classe Validate (de l'API Commons Lang d'Apache) est un choix alternatif intéressant car cette cette classe permet de lever, entre autres, une IllegalArgumentException, qui convient souvent mieux. Et parce qu'elle n'est pas débrayable, elle assure de faire son contrôle tout le temps, a contrario d'assert qui ne fonctionne que si l'exécutant a placé -ea dans sa ligne de commande Java (ce qui n'est pas si fréquent, surtout lorsqu'il ne sait pas qu'il doit le faire !)... Or, un code de contrôle qui ne s'exécute pas, c'est évidemment un code de contrôle qui ne sert à rien.
Pour exemple, j'avais une masse d'assert faits ainsi :
assert(toto != null) : "mon message";
Sous Eclipse, cette recherche (en mode expression régulière) :
assert\((.+) != null\) : "(.+)";
et cette chaîne de remplacement :
m'ont permis de faire le remplacement rapidement.
Bien sûr, j'ai dû ajouter une directive import dans mes sources.
import static org.apache.commons.lang3.Validate.*;
A mon sens, bien que les utilisateurs d'assert ne soient pas si nombreux, ce mot-clef sauve pourtant presque autant que les tests unitaires. En tout cas, il aide à donner confiance dans un code que l'on lit...
Voilà ! Si vous avez d'autres solutions, n'hésitez pas à les partager.
Grunt.
Partager