링크
생소한 단축키
- 다음 에러로 이동 : fn + f2
- 매개변수를 필드로 생성 : 매개변수 선택 후 퀵 픽스
메모
Assert First
- 테스트를 작성할때 then을 먼저 작성한다. 즉, assert부터 거꾸로 작성하는 기술
- assert를 먼저 작성하면, 컴파일 에러가 발생하는데, 이를 고치면서 프로덕션을 만들어 간다.
- test drives. 즉, 테스트가 나를 운전하도록 한다.
- 프로덕션 코드에 무언가를 추가하고 싶으면, 그렇게 할 수 밖에 없도록 만드는 테스트 코드를 추가한다.
- (결론) Assert First를 하면, 쓸데 없는 코드를 적게 만들 수 있다.
- (내 생각) 라이브 템플릿에 then 절에 $END$를 추가하도록 해볼까?
Stairstep Tests
- Game 클래스를 생성하기 위한 canCreateGame 테스트를 떠올려보자. (테스트가 있어야 클래스 생성이 가능함 흑흑ㅠㅠ)
- 다음에 canRoll(roll 메서드를 만들기 위한)을 추가
- 리팩터링이 필요함(new Game의 중복)
- canCreateGame이 불필요한 테스트가 되므로 삭제함
- gutterGame이라는 테스트 내부에서 roll을 수행하게 되면? canRoll 메서드도 필요 없어짐
- 요런 것들을 stairstep test라고 함
- 테스트의 유일한 존재 목적이 다음 테스트를 순차적으로 구현하기 위함인 경우 다음 테스트를 구현한 후에는 삭제되어야 함
- stairstep test는 임시적인 중간 단계 코드로 의미를 갖는다.
- 작은 걸음으로 움직이면, 다음 테스트가 떠오른다.
- 항상 이번 테스트를 작성하면서, 다음에는 무엇을 테스트할지 고민한다.
- (내 생각) 리팩터링 단계에서 stairstep test들을 지우지 않는 습관이 있는데, 고쳐볼 것.
Fake it till you make it
- 정말 구현할 때가 아니라면, 가짜 구현을 만들어 테스트를 성공시켜라.
- 상수를 반환해 테스트가 성공하도록 하는 경우가 이에 해당된다.
- 예측되면 하지마라. 반드시 할 필요가 있을때 그때 해라.
- 이때, 좀더 구체적인 테스트 코드가 추가되면 프로덕션 코드가 더욱 제네릭해짐(삼각법)
- 해당 기법은 프로덕션 코드를 점진적으로 만드는 것을 목적으로 한다.
- 가짜 구현으로 성공시키기 어려운 경우도 존재한다. 즉, 테스트를 성공시키려면, 모든 알고리즘을 구현해야 하는 경우를 말한다.
- 이를 Getting Stuck이라고 하는데, 이때 해결책은 “Write a Simpler test”이다.
- (하늘) 뭐… 더 작은 테스트 코드를 작성하라는 뜻이겠지?
- 다음 수를 고려한 플레이하기
- 테스트를 작성하는 것은 당구와 같음
- 좋은 당구 선수는 매 큐를 다음 큐를 생각하며 경기함
- 작성하는 모든 테스트는 가짜로 구현될 수 있는 여유를 남겨야 한다.(더 이상 fake할 수 없을때 까지)
- 테스트를 잘 작성하는 사람은 한번에 모든 것을 구현하려고 하지 않고 다음 테스트 케이스에서 fake하기 위한 여유 공간을 남겨두려고 함
- (결론) 테스트를 작고, 간단한 설계를 갖도록 유지할 것. 더 이상 테스트할 것이 없을 때까지 복잡한 테스트 작성을 의도적으로 금해야 함
One To Many
- 리스트에 있는 많은 아이템을 다뤄야 하는 것을 알고 있더라도 하나의 아이템을 가지고 시작하는 것이 최상이라는 의미
- 켄트 백의 TDD By Example을 인용, “어떻게 객체의 컬렉션에 동작하는 오퍼레이션을 구현하겠는가? 컬렉션 없이 먼저 구현하고, 컬렉션에 대해서도 동작하도록 만들어라”
- one-to-many 기법은 스택이 하나의 원소에 대해서만 잘 동작하도록 만들라고 조언함
- singular case를 먼저 성공시키고, plural case를 성공시키는 것이 One to Many를 실천하는 방법이다.
Triangulation
- 하나의 테스트가 아니라 여러개의 테스트를 추가함으로써 문제와 해결책을 좀 더 명확히 하는 기법
- “As the tests get more specific, the code gets more GENERIC”
- 하나의 테스트만 존재할 때는 fake할 수 있다(상수를 반환함으로써). 하지만 상수로 처리 불가한 테스트를 추가하면(삼각법에서 2개 이상의 지점을 사용하는 것처럼) fake할 수 없게 된다.