Difference between revisions of "Assertions"

From Suhrid.net Wiki
Jump to navigationJump to search
Line 27: Line 27:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
* Second version of assert takes a second expression which must return a value (primtive/object). This object's string value is added to the assertion error stack trace.
+
* Second version of assert takes a second expression which must return a value (primtive/object). The return value can be anything.
 +
* This object's string value is added to the assertion error stack trace.
  
 
<syntaxhighlight lang="java5">
 
<syntaxhighlight lang="java5">
  
 
private static void processAge2(int age) {
 
private static void processAge2(int age) {
assert age > 0 : "Age is negative";
+
assert age > 0 : errorCode();
System.out.println("Processing age ...");
+
System.out.println("Processing age ...");
 +
}
 +
 +
private static List<String> errorCode() {
 +
return Arrays.asList("oops");
 
}
 
}
  

Revision as of 01:59, 20 July 2011

Introduction

  • Assertions allow the testing of assumptions about a program.
  • Using assertions allow easy detection of bugs during development without writing exception handlers etc.
  • We "assert" that something will be true at some point in the code. If it is, code keeps running, if it is false, an AssertionError will be thrown.

Example:

//Without assertions

private static void processAge1(int age) {
		if(age > 0) {
			System.out.println("Processing age ...");
		} else {
			System.out.println("Age < 0 !");
		}
	}

//With assertions
	
private static void processAge2(int age) {
		assert age > 0;
		System.out.println("Processing age ...");
}
  • Second version of assert takes a second expression which must return a value (primtive/object). The return value can be anything.
  • This object's string value is added to the assertion error stack trace.
private static void processAge2(int age) {
	assert age > 0 : errorCode();
	System.out.println("Processing age ...");
}
	
private static List<String> errorCode() {
	return Arrays.asList("oops");
}