★ wanayoo — archive 1999 http://javaboutique.webdeveloper.com/tutorials/UnitTesting/Nouvelle recherche | Portail wanayoo
80211 Planet

The Event for Search Engine Marketing & Optimization


Find a Web Host With:
CGI Access
DB Support
NT Servers
UNIX Servers
Telnet Access

advanced search
Internet News
Internet Investing
IT
Windows Technology
Linux/Open Source
Developer
Interactive Marketing
xSP Resources
Small Business
Wireless Internet
Downloads
Internet Resources
Internet Lists
International
EarthWeb
Career Resources

Search internet.com
Advertise
Corporate Info
Newsletters
E-mail Offers
Be a Commerce Partner
Find a Web HostFind a Web Host
Compare Prices & Shop
Tech Magazines - FREE
Register Domains
Reach IT Professionals
Software Store
Shop For Computers
Submit Your Site
Breathing Problems?
Build an Online Store
FlashKit
Gif.com
HierMenusCentral
JavaBoutique
JavaScript.com
JavaScriptSource
WebDev Jobs
JustSMIL
ScriptSearch
StreamingMediaWorld
Web Hosts
WebDevelopersJournal WDVL
WebDeveloper.com
WebReference.com
XMLFiles.com
CGI
HTML
Java
JavaScript
Web Design and Promotion
Web Site Development
E-mail Address:


Can you receive
HTML e-mail?

Yes   No

Zip Code:


Tutorials : Unit Testing Java Programs :
Contents
Introduction
Enter JUnit
The Round class
Collecting your test cases

Unit Testing Java Programs

by Keld H. Hansen

Testing programs can be very boring. Especially testing other people's programs. And especially if you're a programmer. But programmers love to write programs, so why not let the programmers write some programs that'll do the testing for them? This is the idea behind automated testing, and this is what this article is about.

Automated unit testing (a unit typically being a Java class) is not a new thing. Some of us did it years ago on the mainframes, and it's as useful as ever. What distinguishes automated unit testing from writing and running ad hoc test programs is this:

  • you can easily run your unit test again and again (this is also called regression testing)
  • you have a "framework" that facilitates the testing--it might actually run the test automatically whenever you build (i.e. compile) or deploy your application

When unit testing is implemented the right way it helps the programmers to become more productive, while at the same time increasing the quality of the developed code. It's important to realize that unit testing should be part of the development process, and that code must be designed so it can be tested. Actually the trend today is to write the unit test code before the code to be tested, to put focus on the interface and behavior of your Java classes. In this article however, we want to simplify the subject, so the code to be tested already exists.

Playing golf

To show how automated testing is done we'll look at a "real life situation"--let's play some golf! Our business case is this: we would like to develop a program that keeps track of the score on a golf course. First we put on our Object Analysis glasses and soon spot these two objects:

  • the Course--with these properties:
    - the name of the course
    - the "par" for the course (the ideal number of strokes for each hole)
  • the Round--symbolizing a player's round on a given course--with these properties:
    - the name of the player (should be an object, but we keep things simple for the example)
    - the course
    - the strokes used for each hole on the course

When a player is on the course we would like to keep track of his score, which we define as the number of strokes above or below the par of the course. So if the par for the first two holes are 4 and 5, and the player used 4 and 6 strokes, the score is 1 ("one above par").

The Course class

The name of the Course we implement as a String, and the par as an int array. Besides setter- and getter-methods, we'll need a method that returns the ideal number of strokes up to hole number "n". Let's call it "parUpToHole(int n)". Here's my suggestion for the class:

package hansen.playground;
import java.util.*;
public class Course {
  private String name; // name of course
  private int[] par; // the par for each hole 
  
  /*
  * Set the name of the course
  */
  public void setName(String name) {
    this.name = name;
  }
  
  /*
  * Set the par for the course
  */
  public void setPar(int[] par) {
    this.par = par;
  }

  /*
  * Get the number of holes for the course
  */
  public int getNumberOfHoles() {
    return par.length;
  }
 
  /*
  * Return the par for a given hole
  */
  public int parForHole(int hole) {
    return par[hole-1];
  }  
  
  /*
  * Return the par from hole 1 and up to a given hole
  */
  public int parUpToHole(int hole) {
    int sum = 0;
    for (int i = 0; i < hole; i++) { 
      sum += par[i];
    }
    return sum;
  }  
}

To simplify the examples we have not included checking for usage errors (like calling "getNumberOfHoles" before calling "setPar").

Testing the Course class

Using the methods in class "Course" we can now sketch a program that will test if "parUpToHole" works as it should. Let's assume that the Course is the famous St. Andrews in Scotland:

Course c = new Course();
	c.setName("St. Andrews");
	int[] par = {4,4,4,4,5,4,4,3,4,4,3,4,4,5,4,4,4,4};
	c.setPar(par);

Par for hole 1 and 2 is obviously 4+4=8, so we can program a test like this:

if (c.parUpToHole(2) != 8) {
  System.out.println(
  "*** Error in Course.parUpToHole: par for 2 holes not 8");
}

If we run the program and the error message is written out, we have a bug to fix (or a bug in our test program!). If the program runs silently all is OK.

You could write a test for each of the 18 holes, but most programmers would be satisfied by testing the limits--0 and 18 holes--and something in between, for example 2:

if (c.parUpToHole(0) != 0) {
  System.out.println(
  "*** Error in Course.parUpToHole: par for 0 holes not 0");
}   
if (c.parUpToHole(2) != 8) {
  System.out.println(
  "*** Error in Course.parUpToHole: par for 2 holes not 8");
}   
if (c.parUpToHole(18) != 72) {
  System.out.println(
  "*** Error in Course.parUpToHole: par for 18 holes not 72");
}

This is not the most elegant way of writing a test program. The essential thing is however, that you want to compare some values, and then according to the result take some action. By writing this test program we may automate the unit test of "parUpToHole", and by running the program we can be pretty sure that this method works as it should.

But we can do better than this...

   


Applet Index
(sorted alphabetically)

A B C D E F G H I J K
L M N O P Q R S T U
V W X Y Z #s
The Java Source
(applets w/source code)

A B C D E F G H I J K
L M N O P Q R S T U
V W X Y Z

How to Add Java Applets to Your Site

New on the Java Boutique:

New Article:
J2EE Deployment Specification
Why is it that J2EE applications written in the same language, Java, may not coexist on different servers? While the answer isn't simple Sun has set out to alleviate these problems with the "J2EE Deployment Specification".
... [more articles]

New Tutorial:
Designing Packages for Stability
Are your designs stable? This month Samudra will focus on the change impact relationship involved in designing classes showing us how to take them into account when designing the package relationship.
... [more Tutorials]

Year in Review:
The Best of 2002
The year 2002 saw 201 new applets posted to JavaBoutique. Check out the 2 most popular apps from each month of 2002!
... [popular applets]

Elsewhere on internet.com:

WebDeveloper Java
Lots of Java information on webdeveloper.com

WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.

ScriptSearch Java
Hundreds of free Java code files to download.

internet.com logo




Developer News

JBoss Group: Defections Aren't a Big Deal

IE Object Tag Buffer Overflow Patched

SCO Shuts Down German Site



Database Journal Launched!
Jupiter Media has announced the launch of Database Journal. DBJ offers SQL courses and other database related resources for beginner to expert developers.



JWizardPane
Build modern wizard style interface quickly. API easy to use. Bulti-in show dialog and frame support.
Download of the Week
BSCOutline v5.10
BSCOutline Java Outline Applet is a customizable tree view control for use in Web pages, similar to that used by Windows File Manager or Explorer. BSCOutline has been written to be the simple to use and small to store.

JB User Poll
How does .NET fit into your programming?
The JavaBoutique Top 15:
1. ChompText
2. RushHour
3. PulseText
4. PingPong
5. DJPopMenu
6. NavBar
7. 3DMaze
8. Encyclo
9. AnimLetters_anim
10. AScroll2
11. Nibbly
12. SonaliCalendar
13. BMMenu
14. BMI
15. SlideMenu
Want more? Check out our Top 100!

Refer-It
Affiliate Program and Referral Directory.
New on internet.com
Verizon Ordered to Reveal Names of Music Pirates
The U.S. Court of Appeals Wednesday afternoon rejected Verizon's for request for a stay in earlier court ruling ordering the telecom giant to turn over the names of two subscribers suspected of illegally downloading copyrighted music.

E-mail Archiving Emerges as Critical Function
In today's corporate world, e-mail holds a company's critical information. Now a growing number of businesses are realizing that they need to save these e-mails. And they just can't pack them away like receipts you toss in a box at home.

The Deadly Duo: Spam and Viruses, May 2003
Spam attacks increase another 6+% for the month, as the global ratio of unwanted messages in business e-mail breaks the 50% mark.


The PC, Console and Hand-held Game Business Event

Copyright 2003 Jupitermedia Corporation All Rights Reserved.
Legal Notices,  Licensing, Reprints, & Permissions,  Privacy Policy.
http://www.internet.com/