ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TDD] 테스트 주도 개발방법론
    Tool/TDD 2018. 9. 15. 05:38


    ** TDD

    - 일반적인 개발 절차는 디자인, 코딩, 테스트 하는 과정이었지만, TDD는 정확한 프로그래밍 목적을 디자인 단계에서 미리 정의해야하고, 

      개발하는 과정에서 테스트 code를 작성하고 리팩토링 했다.


    ** TDD 개발 순서

    - 실패하는 테스트 만들기

    - 테스트를 통과할 만한 작은 코드 작성하기

    - Refatore, 반복되는 코드, 긴 메소드, 긴 매개변수 목록 등등 코드를 효율적으로 바꾸기


    ** TDD 따라해보기

    - TDD를 시작하기에 앞서 예제를 보면서 Junit 실습을 했지만 감이 잡히지 않던 와중에 도움이 될만한 영상을 보게 되었다.

      (https://www.youtube.com/watch?v=16XCgvGJtzA)


    ** 영상 (이해하기 쉬운 예제)


    1) test 폴더 < test 클래스 생성, 계좌Test.class

    @Test

    public void shouldHaveZeroBalanceAfterOpeningANewAccount() // 새로운 계좌 생성하면 돈이 없어야한다.

    {

    계좌 account = new 계좌(); // 계좌 객체 생성했지만 오류 발생

    }


    2) 계좌 객체 생성 // 1)의 오류를 없애주는 작은 코드 작성하기, Test 폴더가 아닌 src 폴더에 클래스 만들기

    public  class 계좌{

    }



    3) get잔액() 메소드가 존재하지 않기 때문에 Test 실패

    @Test

    public void shouldHaveZeroBalanceAfterOpeningANewAccount() 

    {

    계좌 account = new 계좌();

    double current = account.get잔액();  // current에 계좌의 잔액 저장

    assertEquals(0, current, 0.00001); // current가 0인지 확인해주세요, 오차는 0.00001(double에서만 설정)

    )


    4) 계좌 클래스에 get잔액() 생성

    public  class 계좌{


    private double 잔액 = 0;

    public double 잔액(){

    return 잔액

    }

    }


    5) 예금 Test code 작성

    @Test

    public void shouldAddMoneyAfterDeposit() // 돈은 예금했을 때 계좌에 돈을 더해야한다.

    {

    계좌 account = new 계좌();

    account.예금함(123.45);

    }



    6) 계좌 클래스에 금액을 더하는 예금함() 생성

    public void 예금함(double 금액){

    this.잔액 += 금액;

    }



    7) Test 성공

    @Test

    public void shouldAddMoneyAfterDeposit() 

    {

    계좌 account = new 계좌();

    account.예금함(123.45);

    double current = account.get잔액();

    assertEquals(123.45, current, 0.00001);


    account.예금함(200);


    double current = account.get잔액();

    assertEquals(323.45, current, 0.00001);

    }


    8) refactoring

    @Test

    public void shouldAddMoneyAfterDeposit() 

    {

    계좌 account = new 계좌();

    account.예금함(123.45);

    assertEquals(123.45, account.get잔액(), 0.00001);


    account.예금함(200);


    double current = account.get잔액();

    assertEquals(323.45, account.get잔액(), 0.00001);

    }


    9) 인출 Test code 작성, 인출함()이 없어서 Test 실패

    @Test

    public void shouldSubtractAcountAfterWithdraw()

    {

    계좌 account = new 계좌();

    account.예금함(100);

    account.인출함(40);

    assertEquals(60, account.get잔액(), 0.00001);

    }


    10) 계좌 클래스에 금액을 빼는 인출함() 작성

    public void 인출함(double 금액)

    {
     this.잔액 -= 금액;
    }


    11) Test 성공

    @Test

    public void shouldSubtractAcountAfterWithdraw()

    {

    계좌 account = new 계좌();

    account.예금함(100);

    account.인출함(40);

    assertEquals(60, account.get잔액(), 0.00001);

    }


    12) 예외를 기다리고 있지만 발생하지 않아서 Test 실패

    @Test(expected = IllegalArgumentException.class) //예외 기다리고있어요 !-!

    public void shouldThrowExceptionWhenThereIsNoMoney()

    {

    계좌 account = new 계좌();

    account.예금함(100);

    account.인출함(140);

    // 예외 발생하지 않음

    }


    13) 예외조건 만들어서 Test 성공

    public void 인출함(double 금액)

    {
    if(잔액 < 금액) throw new IllegalArgumentException("돈이 없어요.");
     this.잔액 -= 금액;
    }


    ** 왜 TDD 해야해요 ?
    - 테스트 주도 개발하면 언제든지 코드를 바꿔도 버그를 찾을 수 있다. 기획에도 좋다.


    'Tool > TDD' 카테고리의 다른 글

    [TDD, 리팩토링]문자열 계산기  (0) 2018.10.28
    [TDD] Junit 사용법 및 단위 테스트  (0) 2018.09.13

    댓글

Designed by Tistory.