Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

Java Assertions: een praktische gids voor bugdetectie en codebetrouwbaarheid

Java Assertions

Leer hoe Java's assert statement je kan helpen bugs vroegtijdig te vangen, assumpties te valideren, en codekwaliteit te verbeteren.

Assertions zijn een lichtgewicht, developer-only mechanisme voor het testen van condities die altijd true moeten zijn tijdens uitvoering. Ze worden expliciet ingeschakeld en weggelaten uit productie builds, dus ze beïnvloeden nooit runtime performance.

Syntax

assert conditie;

Hier is conditie een boolean expressie die je verwacht te evalueren naar true. Als de conditie false is en assertions ingeschakeld zijn, gooit de JVM een AssertionError en stopt het programma.

Assertions inschakelen

Assertions zijn standaard uitgeschakeld. Schakel ze in met de JVM switch:

java -ea:arguments java -enableassertions:arguments

Wanneer ingeschakeld, gaat een true conditie normaal door; een false conditie triggert een AssertionError en stopt uitvoering.

Voorbeeld 1: Basis assertion

class Main { public static void main(String args[]) { String[] weekenden = {"Vrijdag", "Zaterdag", "Zondag"}; assert weekenden.length == 2; System.out.println("Er zijn " + weekenden.length + " weekenden in een week"); } }

Uitvoer met assertions uitgeschakeld:

Er zijn 3 weekenden in een week

Assertions inschakelen produceert:

Exception in thread "main" java.lang.AssertionError

Uitgebreide assertion syntax

Voeg een diagnostisch bericht toe met:

assert conditie : expressie;

De expressie wordt doorgegeven aan de AssertionError constructor en getoond als de conditie faalt.

Voorbeeld 2: Assertion met bericht

class Main { public static void main(String args[]) { String[] weekenden = {"Vrijdag", "Zaterdag", "Zondag"}; assert weekenden.length==2 : "Er zijn maar 2 weekenden in een week"; System.out.println("Er zijn " + weekenden.length + " weekenden in een week"); } }

Uitvoer wanneer ingeschakeld:

Exception in thread "main" java.lang.AssertionError: Er zijn maar 2 weekenden in een week

Gerichte assertion activatie

Activeer assertions voor specifieke klassen of pakketten:

  • Alle gebruikerklassen: java -ea
  • Specifieke klasse: java -ea:DierKlasse Main
  • Pakket en subpakketten: java -ea:com.dier... Main
  • Naamloze pakketten: java -ea:... Main

Systeemklassen kunnen ingeschakeld worden met -esa of -enablesystemassertions. Uitschakelen volgt een vergelijkbaar patroon met -da en -dsa.

Wanneer assertions waardevol zijn

  1. Onbereikbare code: Verifieer dat code gemarkeerd als onbereikbaar inderdaad onbereikbaar is.
    void onbereikbareCodeMethode() { System.out.println("Bereikbare code"); return; // Onbereikbare code System.out.println("Onbereikbare code"); assert false; }
  2. Ontbrekende default branches: Zorg voor exhaustive handling in switch statements.
    switch (dagVanWeek) { case "Zondag": System.out.println("Het is zondag!"); break; case "Maandag": System.out.println("Het is maandag!"); break; // … default: assert false : dagVanWeek + " is een ongeldige dag"; }
  3. Assumpties documenteren: Vervang kwetsbare comments met assert statements zodat ze in sync blijven.
    if (i % 2 == 0) { // ... } else { assert i % 2 == 1 : i; // ... }

Wanneer geen assertions gebruiken

  1. Public API argument checks: Door gebruikers geleverde inputs moeten runtime exceptions triggern, geen assertion errors.
  2. Side-effectvolle condities: Vermijd methoden aan te roepen die staat wijzigen binnen een assertion, want de code kan stil draaien wanneer assertions uitgeschakeld zijn.
    ArrayList werkdagen = new ArrayList<>(Arrays.asList("Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag" )); ArrayList weekenden = new ArrayList<>(Arrays.asList("Zondag", "Zaterdag" )); boolean verwijderd = werkdagen.removeAll(weekenden); assert verwijderd; 

Voordelen van assertions

  1. Snelle, developer-gefocuste bugdetectie.
  2. Automatisch verwijderd in productie builds, wat nul runtime kost garandeert.
  3. Vermindert boilerplate en verheldert intentie.
  4. Verhoogt vertrouwen tijdens refactoring en optimalisatie.

Java

  1. Java-operators beheersen: typen, syntax en praktische voorbeelden
  2. Java-commentaar: typen, gebruik en best practices
  3. Java if…else beheersen: control flow uitgelegd
  4. Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
  5. Java break-statement: hoe, wanneer en gelabelde breaks uitgelegd
  6. Java Strings beheersen: aanmaken, methodes en best practices
  7. Java interfaces meesteren: concepten, implementatie en best practices
  8. Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
  9. Java Try-with-resources meesteren: automatische resource management uitgelegd
  10. Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
  11. Java Vector begrijpen: Gebruik, Kenmerken en Vergelijking met ArrayList