본문 바로가기
프로그래밍/스프링 자바

TDD 방식으로 개발 예제 (Junit5)

by 커피는아아 2021. 7. 4.
반응형

TDD 방식으로 개발 예제를 작성해 보았다.

로직

 * - 점수가 70점 이상이면 PASS, 아니면 FAIL을 출력한다.

TDD 방식 개발이 아닐 때

import java.util.Random;

public class Example {
    public static void main(String[] args) {

        Random random = new Random();
        for(int i = 0; i < 5; i++) {
            // 1 ~ 100점 사이의 점수를 임의로 5개 넣었다.
            int score = random.nextInt(100);
            if(score >= 70) {
                System.out.println("PASS");
            } else {
                System.out.println("FAIL");
            }
        }

    }
}

TDD 방식으로 개발 할 때

  1. 실패 케이스를 작성한다.
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class ExampleTest {

    @Test
    @DisplayName("학생 성적 테스트 - 과락")
    void fail_score_test () {
        JunitExampleTest je = new JunitExampleTest();

        String valueExpected = "FAIL";

        int failScore = 69;
        String result = je.test(failScore);

        assertEquals(valueExpected, result);

    }

    @Test
    @DisplayName("학생 성적 테스트 - 통과")
    void pass_score_test () {
        JunitExampleTest je = new JunitExampleTest();

        String valueExpected = "PASS";

        int failScore = 79;
        String result = je.test(failScore);

        assertEquals(valueExpected, result);

    }

}
// - 통과하지 못할 것이다.
// JunitExampleTest와 test메소드가 구현되어 있지 않다.
  1. 성공 케이스를 작성한다.
    • JunitExampleTest 클래스와 test 메소드를 구현한다.
    • 테스트가 성공하는지 확인한다.
public class JunitExampleTest {

    public String test(int score) {
        if(score >= 70) {
            return "PASS";
        } else {
            return "FAIL";
        }
    }
}

캡처

  1. 프러덕션에 코드를 적용한다

    public class Example {
        public static void main(String[] args) {
    
            JunitExampleTest je = new JunitExampleTest();
            Random random = new Random();
            for(int i = 0; i < 5; i++) {
                int score = random.nextInt(100);
                System.out.println(je.test(score));
            }
        }
    }
  2. 코드를 리팩토링 하면서 작업의 완성도를 높인다.

    • 예를들어 점수를 0 ~ 100으로 한정하였고 만약 100점 이상이 나올 경우의 처리도 필요하다.