2011-09-19 7 views
0

텍스트 및 이진 파일을 읽고 텍스트 및 이진 파일에 쓸 수있는 생성자가있는 Course 클래스를 작성했습니다. 이 클래스를 테스트하기 위해 junit 테스트를 작성하려면 어떻게해야합니까?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; 
} 

} 다행히

답변

1

당신은 전형적 다음이 필요합니다

  • 생성 된 객체가 예상 한 값 (즉, 당신이 전달 된 값 또는 수행 일부 계산의 결과 데이터가 들어 있는지 확인 그)의 객체에로드
  • 데이터는
  • 예외가 유효하지 않은 입력을 던져) 당신의 테스트에서 실제 파일을 사용하지 않으려는 경우, 파일에 그 (또는 다른의 InputStream과 일치

이외에는 생성자에게는 그다지 도움이되지 않습니다. (디스크 입출력을 수행하지 않고) 값을 할당하는 첫 번째 생성자의 경우 실제로 생성자를 테스트하는 경향이 없으므로 Java 작업의 연산자는 =입니다. 그렇습니다.

그래서 두 번째 생성자에 대해 위의 상황을 다루는 테스트 만 작성합니다.

+0

텍스트 및 이진 파일 저장 테스트는 어떻게해야합니까? – trs

+0

상황에 따라 다르지만 저장 /로드를 테스트 할 때 일반적으로 (1) 오류없이 저장하고 (2) 내 코드로 저장 한 파일을로드 할 수 있는지 테스트합니다. 결과 Java 오브젝트에로드 된 값이 올 바르고 유효하게 나타납니다. 복잡한 작업 일 필요는 없습니다. 응용 프로그램에서 디스크로, 그리고 응용 프로그램으로 다시 돌아가는 과정에서 일관성있는 형태로 데이터를 유지할 수 있습니다. 그래서 '5'의 정수 값을 저장할 때 디스크에서 다시로드 할 때 '5'와 더 잘 일치합니다. – jefflunt

1

, 실제로 필요한 파일을하지 않은 - 그래서 당신은 StringWriter에 쓰기 PrintWriter 전달할 수 있으며, DataInputStreamByteArrayInputStream 포장 :

아래 코드 참조 메모리에있는 모든 것을 테스트하십시오.

또 다른 옵션은 예상 하여 테스트 프로젝트에 자원을 가지고있다 출력 - 항상 메모리에 쓰기,하지만 당신은 아마 FileInputStream보다는 Class.getResource를 사용하여로드해야하는 그 "황금"파일에 대한 기대를 확인 (파일 시스템 종속성을 피하기 위해). 당신이 생성자를 테스트 할 때

+0

좀 더 자세히 설명해 주시겠습니까? – trs

+0

@trs : 조금 더 많은 정보를 추가했지만 문제가있는 부분을 말하면 도움이됩니다. –