이제 학생과 과목 클래스를 테스트 할 차례다.
학생 클래스는 학번 이름 수강하는 과목이 필요하다. 수강하는 과목은 평가 기준과 과목명 과목코드가 필요하기 때문에 참조형으로 생성한다. 나머지도 책을 참조하여 생성후 테스트 한다.
- 생성자 테스트코드 → 에러 → 클래스코드에 생성자 추가 → 통과
위와 같은 방식으로 과목 클래스도 수정한다.
@Before
public void 생성자(){
subject = new Subject("math", 1001, 0);
student = new Student(20101521, "김민석", subject);
score = new Score(55);
basicEvalution = new BasicEvalution();
majorEvalution = new MajorEvalution();
}
다음 테스트
TDD를 하면서 가장 어려운점이 다음 테스트를 정하는 것이다. 이제 무엇을 테스트해야할까?
현재 점수를 입력하면 학점이 나오는 것이 구현됐다 즉 핵심기능을 구현했다. 이제 필요한건 통합이다. 현재 구현된 코드를 보면 클래스별로 정보를 가지고 있고 이것을 모아서 어떤 학생이 듣는 과목,학점, 점수등을 통합해서 보여줄 클래스가 필요하다.
이렇게 통합하는 학교 클래스를 생성하자
학교 클래스
학교에는 여러 학생과 여러 과목이 존재하므로 학생과 과목은 배열로 저장한다.
책에 따르면 학교 클래스는 싱글턴으로 생성하니 싱글턴 테스트 코드도 작성하자
@Test
public void 학교테스트(){
school.getInstance();
}
당연히 에러가 뜨고 School클래스에 싱글턴으로 메소드를 추가하자
학생과 과목 클래스를 배열로 받아야하니 add메서드를 테스트 코드에 작성하고 실제 클래스에 추가한다
첫 에러
@Test
public void 학교테스트(){
school.getInstance();
school.addSubject(subject);
school.addStudent(student);
}
이렇게 타이핑하면 NullPointException이 발생한다. 각자 이방법 저방법 사용해서 해결해보자 힌트를 주자면 School의 싱글턴 패턴으로 인한 에러다.
add로 값을 넣었으니 값이 잘 들어갔는지 get으로 확인하는 메서드도 테스트하자
@Test
public void 학교테스트(){
School school = School.getInstance();
school.addSubject(subject);
school.addStudent(student);
ArrayList<Subject>subjectList = new ArrayList<>();
ArrayList<Student>studentList = new ArrayList<>();
subjectList.add(subject);
studentList.add(student);
assertThat(school.getStudentList(),equalTo(studentList));
assertThat(school.getSubjectList(),equalTo(subjectList));
}
클래스를 디테일하게
- 과목 클래스
현재 과목 클래스의 경우 클래스내에서 어떤 학생이 이 과목을 듣는지 알 수 없다. 즉 수학 과목클래스를 생성하더라도 이 과목을 듣는 학생들에 대한 정보를 담은 리스트가 없기 때문에 만들어야한다. 그리고 수강신청을 하는거니 rigster메서드를 테스트 하고 제작하자.
@Test
public void 과목에학생추가테스트(){
subject.register(student);
}
- 학생 클래스
학생 클래스는 필수과목만 존재한다. 필수과목을 제외하고 다른 과목에 대한 정보는 없기 때문에 추가해줘야한다. 필요한 변수가 과목명, 점수이므로 사전에 만들어 놓은 Score클래스를 활용해 Score타입의 리스트를 만든다.
@Test
public void 학생에점수추가테스트(){
student.addSubjectScore(score);
}
- 필수과목 기본과목 구분
subject에 생성된 과목의 gradeType으로 과목의 필수 여부를 알 수 있다. 0과 1로 구분하며 길이2인 배열을 생성하여 0이면 기본과목 1이면 필수과목의 계산법으로 구분할 수 있도록 구현한다. 만들어놓은 학점 테스트를 수정해서 확인하자
책 마무리
여기까지 따라왔다면 대략적인 TDD의 흐름을 이해할 수 있다. 나머지 부분은 책을 참고해서 만들자
책에는 없지만 현재 코드에서 람다와 스트림, Optional등을 추가해서 수정한 파트를 추후에 올리도록 하겠다.
'TDD > 학점 산출 프로그램' 카테고리의 다른 글
TDD입문하기 - 학점 산출 프로그램 #1 (주의사항, 학점 계산) (0) | 2021.07.29 |
---|