Тестирование JUnit на добавление и сохранение объекта в файл, загрузка объекта из файла

#java #junit

#java #юнит

Вопрос:

Итак, у меня есть это задание из моего класса, где нам нужно протестировать эти тестовые примеры с помощью JUnit. Я немного запутался в том, как проводить тестирование, так как профессор просто просматривает главу JUnit. Проблема, с которой я столкнулся, — это тестовый пример сохранения файлов назначений и загрузки файлов назначений. Кто-нибудь может помочь с тестированием? (инструкция на изображении ниже)

Описание задачи программирования

Метод из Appointment.java:

 public void occursOn(int year, int month, int day){
    System.out.println("Parent method.");
}
  

Appointment.java подкласс (OneTime.java ):

 public void occursOn(int year, int month, int day){
    LocalDate inputDate = LocalDate.of(year,month,day);
    if (inputDate.isEqual(getDate())){
        System.out.println("One-Time Appointment on (Note : "   getDescription()   ")");
    }
    // check if date is after OneTime appointment in the same month
    if (inputDate.isAfter(getDate()) amp;amp; inputDate.getMonthValue() == getDate().getMonthValue()){
        System.out.println("DATE IS AFTER appointment (Note: "  getDescription()  ")");
    }
}
  

Appointment.java подкласс (Daily.java ):

 public void occursOn(int year, int month, int day){
    LocalDate inputDate = LocalDate.of(year,month,day);

    if (inputDate.isAfter(getDate())){
        System.out.println("AFTER DAILY appointment (Note : "   getDescription()   ")");
    }
    if(inputDate.isEqual(getDate())){
        System.out.println("ON DAILY appointment (Note : "   getDescription()   ")");
    }
}
  

MainTest.java (Класс тестирования JUnit):

 import AppointmentPackage.Appointment;
import AppointmentPackage.Appointment;
import AppointmentPackage.Daily;
import AppointmentPackage.Monthly;
import AppointmentPackage.OneTime;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.time.LocalDate;
import java.util.ArrayList;

import org.junit.jupiter.api.Test;

import org.junit.jupiter.api.Test;

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

class MainTest {

@Test
void testOccursOn(){
    ArrayList<Appointment> aptList = new ArrayList<Appointment>();
    Appointment appt1 = new OneTime(LocalDate.parse("2020-10-15"), "Test OneTime");
    Appointment appt2 = new Daily(LocalDate.parse("2020-10-15"), "Test Daily");
    Appointment appt3 = new Monthly(LocalDate.parse("2020-10-15"), "Test Monthly");
    aptList.add(appt1);
    aptList.add(appt2);
    aptList.add(appt3);

    System.out.println("Check date: 2020-10-15");
    for (Appointment a : aptList){
        a.occursOn(2020,10,15);
    }

    System.out.println("nCheck date: 2020-11-15");
    for (Appointment a : aptList){
        a.occursOn(2020,11,15);
    }

    System.out.println("nCheck date: 2020-12-05");
    for (Appointment a : aptList){
        a.occursOn(2020,12,05);
    }

    System.out.println("nCheck date: 2020-09-15");
    for (Appointment a : aptList){
        a.occursOn(2020,9,15);
    }

}

@Test
void testSaving()  {
    ArrayList<Appointment> saveList = new ArrayList<Appointment>();
    Appointment appt1 = new OneTime(LocalDate.parse("2020-10-15"), "Test OneTime");
    Appointment appt2 = new Daily(LocalDate.parse("2020-10-15"), "Test Daily");
    Appointment appt3 = new Monthly(LocalDate.parse("2020-10-15"), "Test Monthly");
    saveList.add(appt1);
    saveList.add(appt2);
    saveList.add(appt3);

    // Saving to file
    String fileName = "testSaveAppt.txt";
    FileWriter fwriter= new FileWriter(fileName, true);
    PrintWriter outputFile= new PrintWriter(fwriter);

    for (Appointment a : saveList) {
        outputFile.println(a.getType()   " "   a.getDate()    " "   a.getDescription());
    }

    outputFile.close();
}

@Test
void testLoad() throws FileNotFoundException {
    // Loading from file
    String fileName = "testSaveAppt.txt";
    File myFile = new File(fileName);
    Scanner inputFile = new Scanner(myFile);

    ArrayList<Appointment> saveList = new ArrayList<Appointment>();
    Appointment appt1 = new OneTime(LocalDate.parse("2020-10-15"), "Test OneTime");
    Appointment appt2 = new Daily(LocalDate.parse("2020-10-15"), "Test Daily");
    Appointment appt3 = new Monthly(LocalDate.parse("2020-10-15"), "Test Monthly");
    saveList.add(appt1);
    saveList.add(appt2);
    saveList.add(appt3);

    for (int i =0; i < saveList.size(); i  ){
        String strFromFile = saveList.get(i).getType()   " "   saveList.get(i).getDate()   " "   saveList.get(i).getDescription();
        assertEquals(strFromFile, inputFile.nextLine());
    }

    inputFile.close();
}

}
  

Ответ №1:

Я бы посоветовал вам провести онлайн-исследование JUnit, это не сложная глава.
Но вот краткое резюме:
JUnit позволяет вам тестировать ваши методы (вы уже это знали), ключевой частью является использование методов Assert, чтобы проверить, соответствуют ли результаты этих методов тем, чего вы ждали.

Например :

 assertTrue(method()); // If the method returns true, then the test has passed !, otherwise there is an error
  

Есть много разных утверждений, которые вы можете использовать, но опять же, посмотрите онлайн!