[테스트 주도 개발(TDD) 시작하기] TDD 시작

·2022년 11월 3일
0
post-thumbnail


최범균님의 테스트 주도 개발 시작하기를 읽고 정리한 내용입니다.

GitHub 저장소

TDD 이전의 개발

한 번에 코드 구현 → 테스트 → 디버깅 & 코드 수정
→ 테스트 → 디버깅 & 코드 수정
→ 테스트 → 디버깅 & 코드 수정
→ ...

코드 짜는 시간보다 버그 찾는 시간이 더 오래 걸리는 경우도 많았다
서버 켜고.. 테스트하고.. 디비 쿼리 날려보고.. 테스트하고..
배보다 배꼽이 더 크다!

TDD란?

TDD(테스트 주도 개발)는 말 그대로 테스트로부터 시작한다!
1. 테스트를 먼저 하고
2. 구현을 한다.
그 때 드는 생각! '엥.. 구현 코드도 없는데 테스트를 어떻게 하지?'
여기서 테스트를 한다는 것은 테스트코드를 작성한다는 것을 의미한다.

  1. 테스트 코드를 짜고
  2. 테스트를 통과시키기 위해 개발을 한다.

완벽하게 구현하기 전(테스트 코드를 다 만족시키기 전) 까지는 src/test/java 소스 폴더에서 작업을 하다, 기능 구현을 완료하면 src/main/java 소스 폴더로 이동시켜 배포 대상에 포함시킨다.
(src/test/java는 배포 대상이 아니므로, 완성되지 않은 코드가 배포되는 것을 방지한다.)

테스트 코드를 짜면서 고민해야하는 것

	@Test
	void plus() {
		int result = Calculator.plus(1, 2);
		assertEquals(3,result);
		assertEquals(5, Calculator.plus(4, 1));
	}

다음은 이 간단한 코드를 짜기 위해서 고민해봐야하는 것들이다.

1. 테스트 대상이 될 클래스 이름, 메서드 이름, 파라미터 개수, 리턴 타입을 고민한다.
2. 새로운 객체를 생성할지 아니면 정적 메서드로 구현할지 고민한다.

이 고민 과정은 실제 코드를 설계하는 과정과 유사하다.

다음은 테스트 코드를 짠 후 해야하는 행동들이다.

1. 테스트 코드를 다 짜면, 컴파일 오류를 없애는 데 필요한 클래스와 메서드들을 작성한다.
2. 테스트를 실행해보고 실패하면 이유를 확인하고 구현을 수정해 테스트를 통과시킨다.
3. 그리고 또 다른 새로운 테스트를 추가하고, 과정 1-2를 반복한다.

TDD는 테스트를 먼저 작성하고,
테스트에 실패하면 테스트를 통과시킬 만큼 코드를 추가하는 과정을 반복하면서
점진적으로 기능을 완성해나간다.

TDD 흐름


레드(테스트) - 그린(코딩) - 리팩터 를 반복한다.

TDD의 특징

테스트가 개발을 주도한다

가장 먼저 통과해야할 테스트를 작성한다.
테스트를 통과시킬 만큼만 기능을 구현한다.
아직 추가하지 않은 테스트를 고려해서 구현하지 않는다.

지속적인 코드 정리

구현을 완료한 뒤에는 리팩토링을 진행한다.
테스트코드가 해당 기능이 온전하게 동작한다는 것을 검증해주기에, 조금 더 과감하게 리팩토링을 진행할 수 있다.

빠른 피드백

새로운 코드를 추가하거나 기존 코드를 수정하면, 테스트를 통해 해당 코드가 올바른지 바로 확인 가능하다.

0개의 댓글