Next we will implement the JUnit unit-testing framework. This will provide us a consistent method to evaluate our code for logic errors as the project grows in complexity.

Download junit from http://www.junit.org/ and place the jar into the lib directory
Refresh and add the jar to the build path

add this to build.xml

    <property name="dir.build.tests" value="${dir.build}/tests"/>
    <property name="dir.build.tests" value="${dir.build}/tests"/>
    <property name="dir.build.tests.classes" value="${dir.build.tests}/classes"/>
    <property name="dir.build.tests.reports" value="${dir.build.tests}/reports"/>
    <property name="dir.build.tests.reports.raw" value="${dir.build.tests.reports}/raw"/>
    <property name="dir.build.tests.reports.html" value="${dir.build.tests.reports}/html"/>

    <property name="dir.build.docs" value="${dir.build}/docs"/>
    <property name="dir.build.docs.tests" value="${dir.build.docs}/tests"/>
   
    <!-- ==========================================================
       
             junit
             Run unit testing with JUnit
       
         ========================================================== -->
   
    <target name="junit">
   
        <echo level="info">
***********************************************************************
*
* Running Tests
*
***********************************************************************
        </echo>
   
        <delete dir="${dir.build.tests}"/>
       
        <mkdir dir="${dir.build.tests}"/>
        <mkdir dir="${dir.build.tests.classes}"/>
        <mkdir dir="${dir.build.tests.reports}"/>
        <mkdir dir="${dir.build.tests.reports.raw}"/>
        <mkdir dir="${dir.build.tests.reports.html}"/>
       
        <!-- copied from compile source -->
        <mkdir dir="${dir.build.tests.classes}"/>
       
        <javac srcdir="${dir.src}"
               destdir="${dir.build.tests.classes}"
               classpathref="classpath"
               includes="**/*.java"
        >
                  <compilerarg value="-Xlint:unchecked"/></javac>
       
        <!-- copy resource files -->
        <echo level="info">copying files to ${dir.build.source}</echo>
        <copy todir="${dir.build.tests.classes}">
            <fileset dir="${dir.src}">
                <include name="**/*"/>
                <exclude name="**/*.java"/>
            </fileset>
        </copy>
        <!-- end copy -->
       
        <junit printsummary="yes" haltonfailure="no" showoutput="yes" fork="yes">
          <classpath>
            <pathelement path="${dir.build.tests.classes}"/>
            <fileset dir="${dir.lib}">
                <include name="**/*.jar"/>
            </fileset>
          </classpath>
            <formatter type="xml"/>
          <batchtest fork="yes" todir="${dir.build.tests.reports.raw}">
            <fileset dir="${dir.build.tests.classes}">
              <include name="**/*Test.class"/>
            </fileset>
          </batchtest>
        </junit>
       
        <junitreport todir="${dir.build.tests.reports.html}">
          <fileset dir="${dir.build.tests.reports.raw}">
            <include name="*.xml"/>
          </fileset>
          <report format="frames" todir="${dir.build.tests.reports.html}"/>
        </junitreport>
       
        <delete dir="${dir.build.docs.tests}"/>
       
        <mkdir dir="${dir.build.docs}"/>
        <mkdir dir="${dir.build.docs.tests}"/>
        <copy todir="${dir.build.docs.tests}">
            <fileset dir="${dir.build.tests.reports.html}">
                <include name="**/*"/>
            </fileset>
        </copy>
    </target>
> ant junit

Build should be sucessful and build\docs\tests should have an index.html file (along with others) that show no tests were run Now add these lines to the 'clean' ant target

        <delete dir="${dir.build.docs}"/>
        <delete dir="${dir.build.tests}"/>
> ant clean

Create a file JPUserTest.java in the same package as the JPUser

package net.wsor.osterman.javapersistence.om;

import static org.junit.Assert.*;
import org.junit.Test;
import net.wsor.utils.logging.Logger;

public class JPUserTest {
    static Logger log = new Logger(JPUserTest.class, Logger.LOG_LEVEL.TRACE);

    @Test
    public final void testGetUsername() {
        JPUser jpu = new JPUser();
        jpu.setUsername("test");
        jpu.setPassword("password");
       
        assertEquals("test", jpu.getUsername());
    }

    @Test
    public final void testSetUsername() {
        JPUser jpu = new JPUser();
        assertNull(jpu.getUsername());
        jpu.setUsername("test");
        assertEquals("test", jpu.getUsername());
    }

    @Test
    public final void testGetPassword() {
        JPUser jpu = new JPUser();
        jpu.setUsername("test");
        jpu.setPassword("password");
        assertEquals("password", jpu.getPassword());
    }

    @Test
    public final void testSetPassword() {
        JPUser jpu = new JPUser();
        assertNull(jpu.getPassword());
        jpu.setPassword("password");
        assertEquals("password", jpu.getPassword());
    }
}
> ant junit

Look at the html reports and see that you've passed 4/4 tests!

> ant svn

commit