Utilisation des assertions Java

1. Introduction

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

Dans cet article, nous verrons comment utiliser le mot-clé Java assert .

2. Historique des assertions Java

Le mot-clé Java assert 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 qui pourraient 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' instruction if et throw avec une seule instruction assert .

3. Activation des assertions Java

Étant donné que les assertions Java utilisent le mot-clé assert , aucune bibliothèque ou package à importer n'est nécessaire.

Notez qu'avant Java 1.4, il était parfaitement légal d'utiliser le mot «assert» pour nommer des variables, des méthodes, etc.

Par conséquent, pour des raisons de compatibilité ascendante, la JVM désactive la validation d'assertion par défaut . Ils doivent être explicitement activés à l'aide de l' argument de ligne de commande -enableassertions ou de son raccourci -ea:

java -ea com.baeldung.assertion.Assertion

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

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

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

Ici, nous avons activé les assertions pour toutes les classes du package com.baeldung.assertion .

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

4. Utilisation des assertions Java

Pour ajouter des assertions, utilisez simplement le mot-clé assert et donnez-lui une condition booléenne :

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 l' AssertionError 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 nulle. Si cette valeur est nulle, la JVM lèvera automatiquement une AssertionError .

Dans le second cas, l'exception aura le détail supplémentaire qui apparaîtra dans la trace de la pile et peut aider à déboguer le 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.baeldung.assertion.Assertion.setup(Assertion.java:15) at com.baeldung.assertion.Assertion.main(Assertion.java:10)

5. Gestion d'une AssertionError

La classe AssertionError étend Error , qui elle-même étend Throwable . Cela signifie que AssertionError est une exception non vérifiée.

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

Les AssertionErrors sont destinés à indiquer des conditions irrécupérables dans une application, n'essayez donc jamais de les gérer ou de tenter une récupération.

6. Meilleures pratiques

La chose la plus importante à retenir à propos des assertions est qu'elles peuvent être désactivées, donc ne supposez jamais qu'elles seront exécutées .

Gardez donc à l'esprit les éléments suivants lorsque vous utilisez des assertions:

  • Vérifiez toujours les valeurs nulles et les options 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 non vérifiée telle que IllegalArgumentException ou NullPointerException
  • 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 avec assert
  • Les assertions sont idéales pour les endroits du code qui ne seront jamais exécutés, comme le cas par défaut d'une instruction switch ou après une boucle qui ne se termine jamais

7. Conclusion

Le mot-clé Java assert 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 disponible à l'adresse over sur GitHub.