0

テキストファイルとバイナリファイルから読み取るコンストラクターと、テキストファイルとバイナリファイルに書き込むメソッドを持つ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;
}

}

4

2 に答える 2

1

コンストラクターをテストする場合、通常は次のものだけが必要です。

  • 作成されたオブジェクトに、期待する値(つまり、渡した値、またはそれらに対して行われた計算の結果のデータ)が含まれていることを確認します。
  • オブジェクトにロードされたデータは、ファイル(または、テストで実際のファイルを使用したくない場合は別のInputStream)のデータと一致します。
  • 無効な入力に対して例外がスローされます

それ以外は、コンストラクターに対して行うことはあまりありません。(ディスクI / Oを実行せずに)値を割り当てるだけの最初のコンストラクターの場合、実際に検証しているの=はJavaのオペレーターが機能することだけなので、これらのコンストラクターをテストする傾向はありません。します。

したがって、2番目のコンストラクターについて上記の状況をカバーするテストのみを記述します。

于 2011-09-19T15:02:36.610 に答える
1

幸い、実際にはファイルは必要PrintWriterありません。そのため、への書き込みStringWriterDataInputStreamラッピングByteArrayInputStreamなどを渡して、メモリ内のすべてをテストできます。

もう1つのオプションは、テストプロジェクトに期待される出力を持つリソースを用意することです。常にメモリに書き込みますが、期待値を「ゴールデン」ファイルと照合します。これらのファイルは、 (ファイルシステムの依存関係を回避するために)Class.getResourceではなく、おそらく使用してロードする必要があります。FileInputStream

于 2011-09-19T15:00:55.073 に答える