“테스트가 개발을 이끌어 나간다” 라는 의미
테스트 케이스를 먼저 작성한 이후에 실제 코드를 개발하는 리팩토링 절차를 진행
<aside> ❗
중간고사, 기말고사, 과제 점수를 통한 성적을 내는 프로그램
</aside>
TDD 테스트케이스 작성
public class GradeTest {
@Test
public void scoreResult() {
Score score = new Score(35, 25, 25);
SimpleScoreStrategy scores = new SimpleScoreStrategy()
String resultGradef = socres.computeGrade(score);
assertEquals("B", resultGrade);
}
}
=>
현재는 Score 클래스와 computeGrade() 메서드가 구현되지 않은 상태이다.(테스트 코드만 존재)
이제 테스트 코드 기반으로 코드를 개발
테스트 코드 기반 코드 개발
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;
]
}
=>
점수를 저장할 Score 함수를 만들었으니 점수 계산을 통해 성적을 뿌려줄 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;
}
}