Quels sont les exemples réels permettant de comprendre le rôle clé des assertions ?
[Les assertions] (http://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.10) (par le biais du mot-clé assert) ont été ajoutées dans Java 1.4. Elles sont utilisées pour vérifier l'exactitude d'un invariant dans le code. Ils ne doivent jamais être déclenchés dans du code de production, et sont révélateurs d'un bogue ou d'une mauvaise utilisation d'un chemin de code. Ils peuvent être activés à l'exécution au moyen de l'option -ea
de la commande java
, mais ne sont pas activés par défaut.
Un exemple :
public Foo acquireFoo(int id) {
Foo result = null;
if (id > 50) {
result = fooService.read(id);
} else {
result = new Foo(id);
}
assert result != null;
return result;
}
Les assertions sont utilisées pour vérifier les post-conditions et les pré-conditions "ne devraient jamais échouer". Un code correct ne devrait jamais échouer à une assertion ; lorsqu'elles se déclenchent, elles devraient indiquer un bogue (avec un peu de chance, à un endroit proche de l'endroit où se trouve réellement le problème).
Un exemple d'assertion pourrait être de vérifier qu'un groupe particulier de méthodes est appelé dans le bon ordre (par exemple, que hasNext()
est appelé avant next()
dans un Iterator
).
Un exemple concret, tiré d'une classe Stack (tiré de [Articles sur les assertions en Java][1])
public int pop() {
// precondition
assert !isEmpty() : "Stack is empty";
return stack[--num];
}
[1] : http://www.oracle.com/technetwork/articles/javase/assertions-139853.html