“test the program before you write it!” - Kent Beck
테스트코드를 먼저 만들고, 실제 프로덕션 코드를 나중에 만드는 개발방법
설계 → 테스트(코드작성) → 설계수정(반복) → 개발(코드작성)
.cf 기존 설계 → 개발(코드작성) → 테스트(코드작성) → 설계수정
green : 테스트를 성공할 수 있게 프로덕션 코드를 구현
Refactor : 리팩토링 수행(중복코드 제거, 일반화)
변화에 대한 두려움을 줄여준다(리팩토링이 편하다)
디버깅 시간을 줄여준다(유닛테스트)
동작하는 문서의 역할을 한다(SI프로젝트에서의 테스트정의서 작성을 줄여줌)
테스트를 안하는 것을 막아줌
오버엔지니어링 방지 → 정말필요한 만큼만코딩을 할 수 있다.
설계에 대한 피드백이 빠르다
코드의 기능을 어떻게 구현했는지를 테스트 하는 것이 아니다.
구현체를 테스트하는 것이 아니다. → 테스트가 구현체와 결합도가 높아지게 한다. (리팩토링시 테스트 케이스가 깨지게 된다)
항상 써야하는 것은 아니고 불확실성이 높을 때 쓰면 좋다.
// input : 생년월일, 현재년도 , output : 나이
// 1. 목표설정 : 태어난 해와 올해년도를 입력받는다(2015, 2018 ->3살)
// 2. 테스트 설계 : 2015, 2018을 입력하면 3이 나오는 프로그램
static void testAge(){
int now = 2018;
int birth = 2015;
if (getAge(now, birth)==3) {
System.out.println("테스트 통과");
} else {
System.out.println("테스트실패");
}
}
// 3. 테스트를 통과할 프로그램을 생성
static int getAge(int now, int birth) {
return now - birth;
}
// 4. 테스트 실행 후 반복
넓음
좁음
Java 단위 테스트 프레임워크
https://www.youtube.com/watch?v=EZ05e7EMOLM