Используйте junit для проверки чтения из текстовых и двоичных файлов и записи в текстовые и двоичные файлы - PullRequest
0 голосов
/ 19 сентября 2011

Я написал класс Course, в котором есть конструкторы, которые читают текстовые и двоичные файлы, и есть методы для записи в текстовые и двоичные файлы.Как написать тест junit для тестирования этого класса?

см. Код ниже:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.PrintWriter;
import java.util.Scanner;

public class Course {
//instance variables
private String courseID;
private String courseName;
private int numberOfCredits;
private String departmentID;

public Course(String courseID,String courseName, int numberOfCredits, String departmentID){
    //constructor
    this.courseID=courseID;
    this.courseName=courseName;
    this.numberOfCredits=numberOfCredits;
    this.departmentID=departmentID;
}

public Course(Scanner inputFile)throws Exception{
    //constructor, read data from text file
    try{
        courseID=inputFile.nextLine();
        courseName=inputFile.next();
        numberOfCredits=inputFile.nextInt();
        departmentID=inputFile.next();
    }
    catch(Exception e){
        throw e;
    }

}

public Course (DataInputStream binFile)throws Exception{
    //constructor reads from binary file and assign values to variables
    try{
    courseID=binFile.readUTF();
    courseName=binFile.readUTF();
    numberOfCredits=binFile.readInt();
    departmentID=binFile.readUTF();
    }
    catch(Exception e){
        throw e;
    }
}
public void saveToTextFile(PrintWriter file){
    //prints to text file
    file.printf(" %s %s %d %s ", courseID, courseName, numberOfCredits, departmentID);
}
public void saveToBin(DataOutputStream binFile)throws Exception{
    //saves information to binary file
    binFile.writeUTF(courseID);
    binFile.writeUTF(courseName);
    binFile.writeInt(numberOfCredits);
    binFile.writeUTF(departmentID);
}



public String toString(){
    //setup string for course display
    String info=courseID + " " + courseName+ " "+ numberOfCredits+" "+ departmentID;
    return info;
}

//getters and setters
public String getCourseName() {
    return courseName;
}

public void setCourseName(String courseName) {
    this.courseName = courseName;
}

public int getNumberOfCredits() {
    return numberOfCredits;
}

public void setNumberOfCredits(int numberOfCredits) {
    this.numberOfCredits = numberOfCredits;
}

public String getDepartmentID() {
    return departmentID;
}

public void setDepartmentID(String departmentID) {
    this.departmentID = departmentID;
}

public String getCourseID() {
    return courseID;
}

}

Ответы [ 2 ]

1 голос
/ 19 сентября 2011

При тестировании конструкторов обычно требуется только следующее:

  • Убедитесь, что созданный объект содержит ожидаемые вами значения (т. Е. Значения, которые вы передали, или данные, полученные в результате некоторых вычислений, выполненных для них)
  • Данные, загруженные в объекты, совпадают с данными в файле (или другом InputStream, если вы не хотите использовать реальные файлы в своих тестах)
  • Исключения выбрасываются для неверного ввода

Кроме этого, конструкторам нечего делать. В случае вашего первого конструктора, который просто присваивает значения (не делая дискового ввода-вывода), я не склонен тестировать эти конструкторы, потому что все, что вы действительно проверяете, это то, что оператор = в Java работает, что мы знаем, что делает.

Итак, я бы написал только тесты, которые охватывают вышеуказанные ситуации для вашего второго конструктора.

1 голос
/ 19 сентября 2011

К счастью, у вас нет необходимых файлов - так что вы можете передать PrintWriter запись в StringWriter и DataInputStream обтекание ByteArrayInputStream и т. Д. И протестировать все в памяти.

Другой вариант - иметь ресурсы в тестовом проекте с ожидаемым выводом - всегда записывать в память, но затем проверять ожидания в отношении тех «золотых» файлов, которые вам, вероятно, следует загрузка с использованием Class.getResource вместо FileInputStream (чтобы избежать зависимости файловой системы).

...