Skip to content
Advertisement

How make a JUnit test that checks whether a date you entered is invalid or not

I am trying to make a JUnit test that checks whether the inputs for an Appointment object are valid or not. I have finished making all the tests, but whenever I run the test, all of the tests pass except for one. For some reason the test testDateInThePast() is failing. Can someone point out the problem? Here is my code:

Appointment.java

    package appointment;

import java.util.Date;

public class Appointment {
    private String appointmentId;
    private Date appointmentDate;
    private String description;
    
    public Appointment(String appointmentId, Date appointmentDate, String description) {
        if(appointmentId == null || appointmentId.length() > 10) {
            //We will want to test for the exception
            throw new IllegalArgumentException("Invalid input");
        }
        if(appointmentDate == null || appointmentDate.before(new Date())) {
            throw new IllegalArgumentException("Invalid date");
        }
        if(description == null || description.length() > 50) {
            throw new IllegalArgumentException("Invalid description");
        }
        this.appointmentId = appointmentId;
        this.appointmentDate = appointmentDate;
        this.description = description;
    }
    
    public String getAppointmentId() {
        return appointmentId;
    }
    
    public Date getAppointmentDate() {
        return appointmentDate;
    }
    
    public String getDescription() {
        return description;
    }
    
}

AppointmentTest.java

    package test;

import static org.junit.jupiter.api.Assertions.*;

import java.util.Calendar;
import java.util.Date;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import appointment.Appointment;

class AppointmentTest {

    @SuppressWarnings("deprecation")
    @Test
    void testAppointment() {
        Appointment appointment = new Appointment("12121212", new Date(2023, Calendar.MAY, 26), "This appointment involves a couple things");
        assertTrue(appointment.getAppointmentId().equals("12121212"));
        assertTrue(appointment.getAppointmentDate().equals(new Date(2023, Calendar.MAY, 26)));
        assertTrue(appointment.getDescription().equals("This appointment involves a couple things"));
        
    }
    
    @Test
    void testAppointmentIdToLong() {
        Assertions.assertThrows(IllegalArgumentException.class, () -> {
            new Appointment("121212124545", new Date(2023, Calendar.MAY, 26), "This appointment involves a couple things");
        });
    }
    
    @SuppressWarnings("deprecation")
    @Test
    void testDateInThePast() {
        Assertions.assertThrows(IllegalArgumentException.class, () -> {
            new Appointment("34345612", new Date(2022, Calendar.JUNE, 26), "This appointment involves a couple things");
        });
    }
    
    @Test
    void testAppointmentDescriptionToLong() {
        Assertions.assertThrows(IllegalArgumentException.class, () -> {
            new Appointment("34345612",  new Date(2023, Calendar.MAY, 26), "This appointment description is very long and many people would not bother to read the whole thing and just skip over some parts");
        });
    }

}

Advertisement

Answer

Consider moving to new java.time.LocalDate

import java.time.LocalDate;

public class Appointment {
    private String appointmentId;
    private LocalDate appointmentDate;
    private String description;

    public Appointment(String appointmentId, LocalDate appointmentDate, String description) {
        if (appointmentId == null || appointmentId.length() > 10) {
            //We will want to test for the exception
            throw new IllegalArgumentException("Invalid input");
        }
        if (appointmentDate == null || appointmentDate.isBefore(LocalDate.now())) {
            throw new IllegalArgumentException("Invalid date");
        }
        if (description == null || description.length() > 50) {
            throw new IllegalArgumentException("Invalid description");
        }
        this.appointmentId = appointmentId;
        this.appointmentDate = appointmentDate;
        this.description = description;
    }

    public String getAppointmentId() {
        return appointmentId;
    }

    public LocalDate getAppointmentDate() {
        return appointmentDate;
    }

    public String getDescription() {
        return description;
    }

}

and:

import Appointment;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.time.LocalDate;
import java.util.Calendar;

import static org.junit.jupiter.api.Assertions.assertTrue;


class AppointmentTest {

    @SuppressWarnings("deprecation")
    @Test
    void testAppointment() {
        Appointment appointment = new Appointment("12121212", LocalDate.of(2023, Calendar.MAY, 26), "This appointment involves a couple things");
        assertTrue(appointment.getAppointmentId().equals("12121212"));
        assertTrue(appointment.getAppointmentDate().equals(LocalDate.of(2023, Calendar.MAY, 26)));
        assertTrue(appointment.getDescription().equals("This appointment involves a couple things"));

    }

    @Test
    void testAppointmentIdToLong() {
        Assertions.assertThrows(IllegalArgumentException.class, () -> {
            new Appointment("121212124545", LocalDate.of(2023, Calendar.MAY, 26), "This appointment involves a couple things");
        });
    }

    @SuppressWarnings("deprecation")
    @Test
    void testDateInThePast() {
        Assertions.assertThrows(IllegalArgumentException.class, () -> {
            new Appointment("34345612", LocalDate.of(2022, Calendar.JUNE, 26), "This appointment involves a couple things");
        });
    }

    @Test
    void testAppointmentDescriptionToLong() {
        Assertions.assertThrows(IllegalArgumentException.class, () -> {
            new Appointment("34345612", LocalDate.of(2023, Calendar.MAY, 26), "This appointment description is very long and many people would not bother to read the whole thing and just skip over some parts");
        });
    }

}
User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement