Tuesday, February 26, 2013

What Is Java "assert" Statement?


What Is Java "assert" Statement?
"assert" statements are part of the Java assertion feature introduced in Java 1.4. Java assertion feature allows developer to put "assert" statements in Java source code to help unit testing and debugging.
An "assert" statement has the following format:
   assert boolean_expression : string_expression;
When this statement is executed:
  • If boolean_expression evaluates to true, the statement will pass normally.
  • If boolean_expression evaluates to false, the statement will fail with an "AssertionError" exception.
Here is a good example of an "assert" statement used to check an invariant:
// Day-of-week calculator
// by FYICenter.com

public class DayOfWeek {
  private int days = 0;

  // main method for testing purpose
  public static void main(String[] arg) {
    int d = Integer.parseInt(arg[0]);
    DayOfWeek o = new DayOfWeek(d);
    System.out.print("Day of the week: "+o.getDayOfWeek());
  }
  
  // constrcutor
  public DayOfWeek(int d) {
    days = d;
  }

  // calculate day of the week
  public String getDayOfWeek() {
    if (days % 7 == 0) {
       return "Sunday";
    } else if (days % 7 == 1) {
       return "Monday";
    } else if (days % 7 == 2) {
       return "Tuesday";
    } else if (days % 7 == 3) {
       return "Wednesday";
    } else if (days % 7 == 4) {
       return "Thursday";
    } else if (days % 7 == 5) {
       return "Friday";
    } else {
       assert days % 7 == 6 : days;
       return "Saturday";
    }
  }
}
How To Compile and Run Java Programs with "assert" Statements?
If you are using "assert" statements in your Java program for unit testing and debugging, you need to compile and execute the program with extra command options to use them:
  • Compilation - "javac -source 1.4 MyClass.java". This tells the compiler to accept source code containing assertions.
  • Executionn - "java -ea MyClass". This tells the JVM to not skill "assert" statements. "-ea" is the same as "-enableassertions".
Here is an example of compiling and executing the sample program, DayOfWeek.java, presented in the previous question:
javac -source 1.4 DayOfWeek.java

java -ea DayOfWeek 1
Day of the week: Monday

java -ea DayOfWeek 6
Day of the week: Saturday

java -ea DayOfWeek 14
Day of the week: Sunday

java -ea DayOfWeek -2
Exception in thread "main" java.lang.AssertionError: -2
        at DayOfWeek.getDayOfWeek(DayOfWeek.java:34)
        at DayOfWeek.main(DayOfWeek.java:11)
As expected, the code does not handle negative numbers correctly.

No comments:

Post a Comment