vendredi 4 septembre 2015

Simple Junit testing with OOP java

Below is a class that represents time using hours and minutes (seconds are not represented).

public class ClassTime {

    public static int hour;
    public static int minute;
    public static String amPm;

    //Initializes the object using specified parameter values.
    public ClassTime(int hour, int minute, String amPm){

        //hour value between 1 and 12, both inclusive.
        boolean validHour = false;
        if (hour >= 1 && hour <= 12){
            validHour = true;
            this.hour = hour;
        } else {
            throw new IllegalArgumentException("Invalid hour value");
        }

        //minute value between 0 and 59, both inclusive.
        boolean validMinute = false;
        if (minute >= 0 && minute <= 59){
            validMinute = true;
            this.minute = minute;
        } else {
            throw new IllegalArgumentException("Invalid minutes value");
        }

        //amPm is either "am" or "pm".
        if (amPm.equalsIgnoreCase("am")){
            this.amPm = amPm;
        } else if (amPm.equalsIgnoreCase("pm")){
            this.amPm = amPm;
        } else {
            throw new IllegalArgumentException("Invalid am/pm value");
        }

    }

    /*
     * Returns a string using the format "hour:minutes am" or "hour:minutes pm".
     * A single space is used in between minutes and am/pm. The minutes always
     * appear with two digits (e.g., 0 minutes will be "00").
     */
    public String toString(){
        String toBeReturned = "hour:" + String.format("%02d", this.minute) + 
                " " + amPm;
        return toBeReturned;
    }

    /*
     * Compares two time objects. Two time objects are considered equal if
     * they represent the same time.
     */
    public boolean equals(ClassTime obj){

        boolean equal = false;

        if (obj.minute == this.minute && obj.hour == this.hour &&
                obj.amPm.equalsIgnoreCase(this.amPm)){
            equal = true;
        } 

        return equal;
    }

    /*
     * Compares two time objects. Returns -1 if the current object is a time
     * that precedes the time parameter, 0 if the current object and the time
     * parameter represent the same time, and 1 if the current object represents 
     * a time that is after the time parameter.
     */
    public int compareTo(ClassTime obj){

        int returnNum = 2;

        if(this.amPm.equalsIgnoreCase("am") && obj.amPm.equalsIgnoreCase("pm")){
            returnNum = -1;
        } else if (this.amPm.equalsIgnoreCase("pm") && 
                obj.amPm.equalsIgnoreCase("am")){
            returnNum = 1;
        } else if (this.amPm.equalsIgnoreCase(obj.amPm)){
            if (this.hour < obj.hour){
                returnNum = -1;
            } else if (this.hour > obj.hour){
                returnNum = 1;
            } else if (this.hour == obj.hour){
                if (this.minute < obj.minute){
                    returnNum = -1;
                } else if (this.minute > obj.minute){
                    returnNum = 1;
                } else if (this.minute == obj.minute){
                    returnNum = 0;
                }
            }
        }
        return returnNum;
    }

    /*
     * Returns a new time object corresponding to the time we will have after 
     * increasing the time parameter by the specified number of minutes.
     */
    public static ClassTime increaseByMinutes(ClassTime obj, int minutes){

        //create variables that monitor changes in minutes, hours, and amPm.
        int minValue = obj.minute + minutes;
        int hourValue = obj.hour;
        String amPmValue = obj.amPm;

        /*
         * increments hour and minutes if the total minutes is below two hours, 
         * but greater tan or equal to 1 hour.
         */
        if(minValue > 59 && minValue < 120){
            minValue = minValue % 60; 
            hourValue = hourValue + 1;
            if (hourValue > 12){
                hourValue = hourValue % 12;
            } else if(hourValue == 12 && amPmValue.equalsIgnoreCase("am")){
                amPmValue = "pm";
            } else if (hourValue == 12 && amPmValue.equalsIgnoreCase("pm")){
                amPmValue = "am";
            }

            /*
             * Increment for when the total amount of minutes is greater
             * or equal to 2 hours.
             */
        } else if (minValue > 119){
            for(int i = 0; i <= (minValue/60); i++){
                hourValue++;
                if(hourValue > 12){
                    hourValue = hourValue % 12;
                } else if (hourValue == 12 && amPmValue.equalsIgnoreCase("am")){
                    amPmValue = "pm";
                } else if (hourValue == 12 && amPmValue.equalsIgnoreCase("pm")){
                    amPmValue = "am";
                }
            }
        }

        /*
         * Create a new ClassTime object with the found values of minutes, hours,
         * and amPm Value. This is what will be returned.
         */
        ClassTime newObject = new ClassTime(hour, minute, amPm);

        newObject.minute = minValue;
        newObject.hour = hourValue;
        newObject.amPm = amPmValue;

        return newObject;

    }


    public static void main(String[] args) {

    }

}

I forgot how I would test the constructor and one of the methods in a JUnit test case. So far the only thing I can come up with for the contructor is:

import static org.junit.Assert.*;

import org.junit.Test;

public class JunitTests {

    @Test
    public void testClassTime() {
        ClassTime object1 = new ClassTime(3, 30, "pm");



    }

}

How would I finish doing a test for the constructor and maybe just 1 method. Please don't do all of them. Yes, the code seems rather long to post on here, no you don't have to read all of it to understand what i'm asking for :P

Aucun commentaire:

Enregistrer un commentaire