1장

TDD의 정의
프로그램을 작성하기 전에 테스트를 먼저 작성하는 것
업무 코드를 작성하기 전에 테스트 코드를 먼저 만드는 것

TDD의 목표
최종 목적은 '잘 동작하는 깔끔한 코드'

개발에 있어 TDD의 위치
개발자가 자신을 위해 처음으로 수행하는 테스트
TDD에서 개발자는 자신이 작성한 프로그램에 대해 메소드 혹은 함수 단위로 테스트를 수행한다.

TDD의 진행방식
질문 : 테스트 작성을 통해 시스템에 질문한다. (테스트 수행 결과는 실패)
     -작성하고자 하는 메소드나 기능이 무엇인지 선별하고 작성 완료 조건을 정해서 실패하는 테스트 케이스를 작성하는 것.
응답 : 테스트를 통과하는 코드를 작성해서 질문에 대답한다. (테스트 성공)
정제 : 아이디어를 통합하고, 불필요한 것은 제거하고, 모호한 것은 명확히 해서 대답을 정제한다. (리팩토링)
반복 : 다음 질문을 통해 대화를 계속 진행한다.

TDD의 장점
-개발의 방향을 잃지 않게 유지해준다
-품질 높은 소프트웨어 모듈 보유
-자동화된 단위 테스트 케이스를 갖게 된다
-사용설명서 & 의사소통의 수단
-설계 개선
-보다 자주 성공한다.

2장. JUnit과 Hamcrest
JUnit의 기능
- 테스트 결과가 예상과 같은지를 판별해주는 단정문
- 여러 테스트에서 공용으로 사용할 수 있는 테스트 픽스처
- 테스트 작업을 수행할 수 있게 해주는 테스트 러너

대표적인 단정문
- assertEquals( [message], expected, actual ) : 두 값이 같은지 비교하는 단정문으로, 예상에 해당하는 expected와 실제 테스트 수행 결과에 해당하는 actual이 서로 일치하는지 비교 판단한다. 
 
static public void assertEquals(String message, Object expected, Object actual ) {
     if ( expected == null && actual == null )
          return;
     if ( expected != null && expected.equals(actual))
          return;
     fallNotEqual(message, expected, actual);
}
둘 다 null이면 통과! expected가 null이 아니고 expected의 equals 메소드를 이용해 비교했을 때 같으면 또 통과! 그리고 위 두 경우가 아니면 실패(fail)로 처리된다.
 
- assertEquals( [message], double expected, double actual, double delta ) 오차 범위 내의 동일한 값인지 판단하는 메서드
예) 1을 3으로 나눈 double 타입을 오차를 설정해서 예상 값이 오차 내에서 같은지 확인
assertEquals( 0.3333, 1/3d, 0.0001 )

- assertSame( [message], expected, actual ) / assertNotSame(  [message], expected, actual )
두 객체가 정말 동일한 객체인지 주소값으로 비교하는 단정문이다.
예 ) 특정 객체가 캐시에서 가져온 객체와 동일한지 여부를 판단

- assertTrue( [message], expected ) / assertFalse( [message], expected )
예상값의 참/거짓을 판별하는 단정문
 
- assertNull( [message], expected ) / assertNotNall( [message], expected )
대상 값의 null 여부를 판단하는 단정문
 
- fail( [message] )
이 메소드가 호출되면 해당 테스트 케이스는 그 즉시 실패함
예) 테스트 케이스를 작성 중인데 완료하지 못한 채 구현을 중단해아 할 때 테스트를 수행하면 녹색막대가 나온다. 끝 부분에 fail()을 쓰면 테스트가 실패가 되고 나중에 어디서 부터 테스트를 작성해야 하는지 알 수 있게 한다.


테스트주도개발TDD실천법과도구
카테고리 컴퓨터/IT > 프로그래밍/언어
지은이 채수원 (한빛미디어, 2010년)
상세보기
 
 

WRITTEN BY
뮤네

,