A class should be unit tested before integrating it with a larger program. Bugs are easier to find and fix without dealing with complex interactions between classes. By including a main method in each class to test just that class, the testing can be accomplished in an easy and uniform manner.
public class Date
{ private int year;
private int month;
private int day;
public Date(int aYear, int aMonth, int aDay)
{ this.year = aYear;
this.month = aMonth;
this.day = aDay;
}
/** Is this date before date d? */
public boolean before(Date d)
{ return (this.year < d.year) ||
(this.year == d.year && this.month < d.month) ||
(this.year == d.year && this.month == d.month && this.day < d.day);
}
/** Convert a Date object to a String */
public String toString()
{ return this.year + "/" + this.month + "/" + this.day;
}
/** Test the class. */
public static void main(String[] args)
{ Date d1 = new Date(2005, 12, 25);
Date d2 = new Date(2005, 12, 24);
String t1 = d1 + " before " + d2;
String t2 = d2 + " before " + d1;
String t3 = d1 + " before " + d1;
test("t1", d1.before(d2), false);
test("t2", d2.before(d1), true);
test("t3", d1.before(d1), false);
}
private static void test(String msg, boolean answer, boolean expected)
{ if (answer == expected)
{ System.out.print("passed ");
} else
{ System.out.println("FAILED ");
}
System.out.println("Test: '" + msg + "'");
System.out.println(" Expected: '" + expected + "'");
System.out.println(" Got: '" + expected + "'");
System.out.println();
}
}
public class <name-of-class>
{ <instance-variables>
<methods>
/** Test the class. */
public static void main(String[] args)
{
<code-to-test-class>
System.out.println(<message-to-report-test-results>);
}
}