본문 바로가기

TIL

TDD 2부

스터디하면서 읽은 3번째 책인데, 시간이 안 나서 계속 정리를 못하다가 오랜만에 정리 좀 하려고 한다. 1부 내용이 쉽지가 않아서 3부 패턴들까지 다 보고 다시 돌아가서 보면 좋을 거 같다. 2부도 1부와 같이 TDD 예시를 보여준다. 여기서는 테스트를 위한 도구를 구현하면서 TDD를 보여준다. 다시 한 장씩 천천히 정리해봐야겠다.

먼저 2부의 시작인 18장에서는 테스트 케이스를 작성하기 위해 사용할 프레임워크를 테스트 하기 위한 테스트 케이스를 작성하는 도입 부분이다. 테스트 코드가 실행되었는지를 테스트하는 코드를 작성한다. 1부에서도 계속 나왔지만 일단 상수값을 넣어서 빠르게 초록 막대를 보기 위한 작업을 먼저 한다. 그리고 그 구조에 맞게 테스트 코드를 작성한다.

중간에 여러 리팩토링에 대한 이야기가 나오는데 기억에 남는 부분은 하나의 특별한 사례에 대해서만 작동하는 코드를 가져다가 다른 여러 사례에 대해서도 작동할 수 있도록 상수를 변수로 변화시켜 일반화하는 것이다. 추론에 의해 일반화하게 하지 않고, 잘 돌아가는 구체적인 사례에서 시작해서 일반화할 수 있게 해준다고 한다. 머리 아플때 그냥 빠르게 실천하면 좋을 거 같다.

18장에서는 작은 단계에서 시작하는 법을 알려주고, 위에서 말한 구체적인 예에서 일반화하는 과정 등을 보여주는데 이건 1부에서도 반복적으로 나온 내용들이다.

19장은 setUp 하는 부분이 나온다. 여기서는 두 가지 상충하는 제약을 이야기하는데, 일단 하나의 객체로 여러 테스트를 쓰게 한다면 성능적인 면에서 좋을 테지만, 다른 테스트에서 영향을 줄 수 있기 때문에 격리해야 될 필요가 있다. 테스트 사이에 커플링이 생긴다고 하는데, 이런 상황은 만들지 말아야 한다.

20장은 tearDown 함수를 사용해서 외부 자원을 할당받은 테스트들이 작업을 마치기 전에 자원을 다시 반환하게 하는 단계를 설명한다. 여기서는 단순히 플래그를 사용하기보다는 로그를 통해서 메서드 호출 순서를 기록한다.

21, 22장에서는 테스트가 잘 돌아갔는지 결과를 출력하기 위한 테스트를 작성한다. 여기서 저자는 테스트 구현 순서에 대해 잠깐 이야기하는데 항상 본인에게 가르침을 줄 수 있고 확신이 드는걸 먼저 선택한다고 한다. 3부에서도 이 부분에 대해서 잠깐 나오는데 중요한 방향인 거 같다. 아무튼 여기서는 테스트가 실패했는지 성공했는지를 문자열로 출력하는 테스트를 작성한다. 그걸 위해 에러를 일으켜 테스트를 해본다. 22장에서 몇 가지 간단한 팁들을 공유하는데 일단 작은 스케일에서 시작해서 큰 스케일로 넘어가는 방식과 문제를 발견하면 일단 바로 처리보다는 목록에 리스트 업만 해두는 것이다.

23 장에서는 여러 개의 테스트를 한 번에 돌리는 Test Suite를 테스트한다. 여기서 매개 변수 수집이라는 패턴으로 구현하는데, 호출하는 곳에서 TestResults를 할당하는 전략을 사용한다. 컴포지트 주요 제약 중 하나는 컬렉션이 하나의 개별 아이템인 것처럼 반응해야 하기 때문에 위의 방식을 사용했다고 한다.  

마지막 회고에서 저자는 프로그래밍 언어를 처음 접할 때 이렇게 xUnit을 만들어 보면서 익힌다는데 괜찮은 방법인 거 같다. 

 

좀 급하게 정리했다. 1부에 이어서 2부도 예시를 통해 여러 가지를 설명해 주는데 사실 중요한건 책에 나와있는 코드를 저자가 왜, 어떻게 변경하는지를 파악하는 게 중요한 거 같다. 저자가 중간중간 코드를 쉽게 바꾸는데 이러한 부분들은 다시 돌아와서 여러 번 읽어 봐야겠다.

 

참고 및 출처: <테스트 주도 개발> (켄트 벡 지음, 김창준, 강규영 옮김, 인사이트 , 2014)

'TIL' 카테고리의 다른 글

API 요청 모듈 계층 분리 과정  (0) 2023.09.21
TDD 3부  (0) 2022.06.12
객체지향의 사실과 오해 3~4장  (1) 2022.03.31
객체지향의 사실과 오해 1장~2장  (0) 2022.03.20
This Week. 2.14 ~ 2.18  (0) 2022.02.19