TDD란

TDD 과정

image.png

image.png

예제

<aside> ❗

중간고사, 기말고사, 과제 점수를 통한 성적을 내는 프로그램

</aside>

  1. 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() 메서드가 구현되지 않은 상태이다.(테스트 코드만 존재)
    이제 테스트 코드 기반으로 코드를 개발
    
  2. 테스트 코드 기반 코드 개발

    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;
        }
        
    }