테스트 주도 개발
✔️ 기존 방법
✔️ TDD
➡️ 반복적인 테스트와 수정을 통해 고품질의 소프트웨어를 탄생시킬 수 있음
Red 단계에서는 실패하는 테스트 코드 먼저 작성
Green 단계에서는 테스트 코드를 성공시키기 위한 실제 코드 작성
Blue 단계에서는 중복 코드 제거, 일반화 등의 리팩토링 수행
➕ JUnit
가장 널리 사용되는 Java 단위 테스트 프레임워크
JUnit을 시작으로 CUnit, CPPUnit, PyUnit 등 xUnit 프레임워크 탄생
중간고사, 기말고사, 과제 점수를 통한 성적을 내는 간단한 프로그램
➡️ 점수 총합 90점 이상은 A, 80점 이상은 B, 70점 이상은 C, 60점 이상은 D, 나머지는 F
✔️ TDD 테스트 케이스 작성
35 + 25 + 25 = 85점이므로 B등급
따라서 assertEquals의 인자값을 "B"로 주고,
테스트 결과가 일치하는지 확인하는 과정 진행
public class GradeTest {
@Test
public void scoreResult() {
Score score = new Score(35, 25, 25); // Score 클래스 생성
SimpleScoreStrategy scores = new SimpleScoreStrategy();
String resultGrade = scores.computeGrade(score); // 점수 계산
assertEquals("B", resultGrade); // 확인
}
}
현재는 Score 클래스와 computeGrade() 메소드가 구현되지 않은 상태(테스트 코드로만 존재)
✔️ 점수를 저장할 Score 클래스를 생성
public class Score {
private int middleScore = 0;
private int finalScore = 0;
private int homeworkScore = 0;
public Score(int middleScore, int finalScore, int homeworkScore) {
this.middleScore = middleScore;
this.finalScore = finalScore;
this.homeworkScore = homeworkScore;
}
public int getMiddleScore(){
return middleScore;
}
public int getFinalScore(){
return finalScore;
}
public int getHomeworkScore(){
return homeworkScore;
}
}
✔️ 점수 계산을 통해 성적을 뿌려줄 computeGrade() 메소드를 가진 클래스 생성
// 인터페이스 구현
public interface ScoreStrategy {
public String computeGrade(Score score);
}
// 인터페이스 오버라이딩 한 클래스 구현
public class SimpleScoreStrategy implements ScoreStrategy {
public String computeGrade(Score score) {
int totalScore = score.getMiddleScore() + score.getFinalScore() + score.getHomeworkScore(); // 점수 총합
String gradeResult = null; // 학점 저장할 String 변수
if(totalScore >= 90) {
gradeResult = "A";
} else if(totalScore >= 80) {
gradeResult = "B";
} else if(totalScore >= 70) {
gradeResult = "C";
} else if(totalScore >= 60) {
gradeResult = "D";
} else {
gradeResult = "F";
}
return gradeResult;
}
}
➡️ 통과 가능한 정보를 넣고 실행하면 제대로 실행
[참고 자료]