백엔드 Back-end/테스트 Test

켄트 벡의 테스트 주도 개발 예제대로 따라해보기

Tap to restart 2024. 4. 28. 11:00
반응형

켄트 백의 테스트 주도 개발 책에 나온 예제대로 조금만 따라해보면 테스트 주도 개발을 이해할 수 있다.
 
 

준비: IntelliJ IDEA 설치하기

먼저 IntelliJ IDEA를 내려받는다.
https://www.jetbrains.com/idea/download/?section=mac

 
Community Edition을 내려받으면 공짜로 사용할 수 있다.
 
실행하면 이런 화면이 나온다.
 

 
New Project를 누르고 TDD라고 적자.
 

 
Create을 누르면 이 상태가 된다.
 

 
 

테스트 만들기

테스트 주도 개발은 테스트부터 만드는 것이다.
 
책에 나온 간단한 곱셈 예제는 아래와 같다.

    public void testMultiplication(){
        Dollar five = new Dollar(5);
        five.times(2);
        assertEquals(10, five.amount);
    }

 

 
 
DollarTest란 파일을 만들자.
 

 
예제처럼 입력하자.
 

 
다 빨간색이 나온다.
 
책과 다르게 IDE를 이용해서 바로 테스트할 수 있도록 public void 윗줄에 @Test를 추가한다.
 

 
@Test 위에 마우스 커서를 두고 마우스 오른쪽 버튼을 누르면 Show Context Actions가 보인다(물론 단축키를 눌러도 된다). 클릭한다.
 

 
Add JUnit5.8.1 to classpath를 누른다.
 

 
OK를 누른다.
 

 
 
TDD.iml에 JUnit5.8.1이 추가된 것을 확인할 수 있다.
 

 
다시 @Test 위에 마우스 커서를 두고 마우스 오른쪽 버튼을 누르면 Show Context Actions을 누르면 Import class가 나온다.
 

 
클릭한다. import 된 것을 확인할 수 있다. 아래처럼 초록색 시작 버튼이 안 보일 수 있다.
 

 
이럴 때는 IDE를 껐다 켜보자. 그러면 아까와 다르게 초록색 시작 버튼이 생긴 것을 확인할 수 있다.
 

 
Run 또는 Debug를 누른다. Run은 테스트를 실행하는 것, Debug는 디버깅 모드로 테스트를 실행하는 것으로 빨간 중지점을 찍어둔 경우 해당 지점에서 멈춘다. Run으로 실행하자.
 

 
누르면 아래쪽에 Build Output 창이 생기면서 빨간 느낌표로 테스트 실패에 대한 정보를 확인할 수 있다.
 

 
 
이제 해야할 일은 테스트를 성공하게 만드는 것이다. IDE의 힘을 빌리면 쉽게 하나씩 해결할 수 있다.
 

Dollar class부터 만들기

Dollar class부터 만들자. Show Context Actions 단축키를 누르자. 단축키는 윈도우와 맥에 따라 설정에 따라 다를 수 있다. 맥의 경우 Option + Enter 키다. Create class 'Dollar'를 누른다.
 

그냥 OK를 누르자. 소스 클래스와 테스트 클래스를 구분하는 게 좋지만, 그건 나중에 해도 된다.
 

 
 
Dollar class가 생겼다.
 

 
이제 빨간색 표시가 하나 줄었다. 
 

 
5에 밑줄이 있다. 생성자가 없어서 그렇다. 마찬가지로 Show Context Actions 단축키를 누르면 생성자를 만들라고 나온다. 눌러서 만들자.
 

 

 
책대로 i 대신 amount로 바꿔주자.
 
만들면 밑줄이 없어진 것을 볼 수 있다.
 

 
다시 테스트를 실행해보자. 아까와 테스트 에러 설명이 달라진 것을 확인할 수 있다.
 

 
times 메소드를 찾을 수 없고, amount 필드가 없어서 에러가 나고 있는 것을 알 수 있다.
이제 times 메소드를 추가하고, amount 필드만 추가하면 모든 에러를 해결할 수 있다.
 
책 내용대로 times 메소드를 추가하자.

    public void times(int multiplier) {
    }

 
다시 밑줄이 하나 줄어든 것을 볼 수 있다.
 

 
이제 amount 필드를 추가하자.

    public int amount;

 
빨간 색이 모두 없어진 것을 확인할 수 있다.
 

 
다시 테스트를 실행해보자.
 

 
기대값이 10인데 실제는 0이라 테스트가 실패한 것을 볼 수 있다.
테스트가 통과되도록 amout = 10으로 초깃값을 부여하자.
 

public class Dollar {
    public int amount = 10;

    public Dollar(int amount) {
    }

    public void times(int multiplier) {
    }
}

 
다시 테스트를 실행하자. 드디어 초록색을 봤다. 모든 테스트가 통과되었다.
 

 

중복을 제거하기

이제는 중복을 제거할 시점이다. 
10은 테스트에서 넘어온 값이다. amount = 10 대신에 아래처럼 바꿀 수 있을 것이다.

    public void times(int multiplier) {
        amount = 5 * 2;
    }

 
여전히 테스트를 통과한다.
 
5는 생성자에서 넘어온 수이고, 2는 메소드에서 넘어온 수이다. 따라서 아래처럼 바꾸자.

public class Dollar {
    public int amount;

    public Dollar(int amount) {
        this.amount = amount;
    }

    public void times(int multiplier) {
        amount = amount * multiplier;
    }
}

 
여전히 테스트를 통과한다.

 
 

관련 글

Q. 테스트 주도 개발Test-Driven Development(TDD)란?
전통적인 개발과 테스트 주도 개발, 그리고 애자일
테스트 주도 개발이 기능부터 개발하는 것보다 더 빠르고 안정적이다

 

반응형