Utilisation d’assertions Java

Utilisation d'assertions Java

1. introduction

Le mot-clé Javaassert permet aux développeurs de vérifier rapidement certaines hypothèses ou l'état d'un programme.

Dans cet article,we’ll take a look at how to use the Java assert keyword.

2. Histoire des assertions Java

Le mot-clé Javaassert a été introduit dans Java 1.4, il existe donc depuis un certain temps. Cependant, il reste un mot-clé peu connu qui peut réduire considérablement le passe-partout et rendre notre code plus lisible.

Par exemple, souvent dans notre code, nous devons vérifier certaines conditions susceptibles d'empêcher notre application de fonctionner correctement. En général, nous écrivons quelque chose comme ceci:

Connection conn = getConnection();
if(conn == null) {
    throw new RuntimeException("Connection is null");
}

En utilisant des assertions, nous pouvons supprimer l'instructionif etthrow avec une seule instructionassert.

3. Activation des assertions Java

Étant donné que les assertions Java utilisent le mot-cléassert, il n'y a pas de bibliothèques ni de packages à importer.

Notez qu'avant Java 1.4, il était parfaitement légal d'utiliser le mot «assert» pour nommer des variables, des méthodes, etc. Cela risque de créer un conflit d'appellation lors de l'utilisation d'un code plus ancien avec de nouvelles versions de JVM.

Par conséquent, pour la compatibilité descendante,the JVM disables assertion validation by default. Ils doivent être explicitement activés en utilisant soit l'argument de ligne de commande-enableassertions, soit son raccourci-ea:

java -ea com.example.assertion.Assertion

Dans cet exemple, nous avons activé les assertions pour toutes les classes.

Nous pouvons également activer des assertions pour des packages et des classes spécifiques:

java -ea:com.example.assertion... com.example.assertion.Assertion

Ici, nous avons activé les assertions pour toutes les classes du packagecom.example.assertion.

De même, ils peuvent être désactivés pour des packages et des classes spécifiques en utilisant l'argument de ligne de commande-disableassertions ou son raccourci-da. Nous pouvons également utiliser les quatre arguments ensemble.

4. Utilisation d'assertions Java

Pour ajouter des assertions,simply use the assert keyword and give it a boolean condition:

public void setup() {
    Connection conn = getConnection();
    assert conn != null;
}

Java fournit également une deuxième syntaxe pour les assertions qui prend une chaîne, qui sera utilisée pour construire lesAssertionError si une est lancée:

public void setup() {
    Connection conn = getConnection();
    assert conn != null : "Connection is null";
}

Dans les deux cas, le code vérifie qu'une connexion à une ressource externe renvoie une valeur non NULL. Si cette valeur estnull,, la JVM seraautomatically throw an AssertionError.

Dans le second cas, l'exception contiendra les détails supplémentaires qui apparaîtront dans la trace de la pile et faciliteront le débogage du problème.

Jetons un coup d'œil au résultat de l'exécution de notre classe avec les assertions activées:

Exception in thread "main" java.lang.AssertionError: Connection is null
        at com.example.assertion.Assertion.setup(Assertion.java:15)
        at com.example.assertion.Assertion.main(Assertion.java:10)

5. Gestion d'unAssertionError

La classeAssertionError étendError, qui elle-même étendThrowable. Cela signifie queAssertionError est une exception non cochée.

Par conséquent, les méthodes qui utilisent des assertions ne sont pas obligées de les déclarer, et le code appelant ultérieur ne doit pas essayer de les intercepter.

AssertionErrors are meant to indicate unrecoverable conditions dans une application, n'essayez donc jamais de les gérer ou de tenter une récupération.

6. Les meilleures pratiques

La chose la plus importante à retenir à propos des assertions est qu'elles peuvent être désactivées, doncnever assume they’ll be executed.

Par conséquent, gardez à l'esprit les points suivants lorsque vous utilisez des assertions:

  • Vérifiez toujours les valeurs nulles et lesOptionals vides le cas échéant

  • Évitez d'utiliser des assertions pour vérifier les entrées dans une méthode publique et utilisez plutôt une exception vérifiée telle queIllegalArgumentException ouNullPointerException

  • N'appelez pas de méthodes dans des conditions d'assertion et affectez plutôt le résultat de la méthode à une variable locale et utilisez cette variable avecassert

  • Les assertions sont idéales pour les endroits du code qui ne seront jamais exécutés, comme le casdefault d'une instructionswitch ou après une boucle qui ne se termine jamais

7. Conclusion

Le mot-clé Javaassert est disponible depuis de nombreuses années mais reste une fonctionnalité peu connue du langage. Cela peut aider à supprimer beaucoup de code standard, à rendre le code plus lisible et à identifier les bogues au début du développement du programme.

N'oubliez pas que les assertions ne sont pas activées par défaut, donc ne supposez jamais qu'elles seront exécutées lorsqu'elles sont utilisées dans le code.

Comme toujours, le code source complet est disponibleover on GitHub.