신뢰할 수 있는 코드를 만들기 위해서는 테스트 자체도 믿음직 해야 한다.
주석으로 변한 테스트는 한낱 잡음에 불과하다.
실용성을 추구해야 한다. 주석 처리한 이유를 바로 알아내지 못했다면 앞으로도 영원히 알아내지 못할 가능성이 높다.
거짓말을 늘어놓는 제멋대로인 녀석이다. 도움보다는 해만 끼치는 녀석이니 없애는 쪽이 백번 낫다. 코드의 의도를 전달할 책임은 사실 코드 자신에 있다. 주석없이는 동작을 이해하기 어려운 코드가 있다면 아직 코드를 충분히 리팩토링 하지 못했다는 뜻이다.
주석은 대체로 나쁘다. 테스트 코드에서도 마찮가지다. 얼핏 도움 되는 듯 보이더라도 경계의 눈초리로 세심히 살펴야 한다.
오해를 낳는 주석의 탄생과정 : 주석을 처음 작성했을 때에는 대부분 의미있고 올바른 내용을 담고 있따. 하지만 시간이 흐르고 코드가 변해가면서 서서히 괴리가 생기고 점점 혼란스럽고 제멋대로인 주석으로 변해간다.
좋은 주석이란 코드가 그렇게 작성될 수밖에 없었던 당위성을 설명하는 주석이다.
통과했으니 문제 없을 것이라는 잘못된 인식을 심어줄 수 있으니 없으니만 못하다.
fail()
을 불러줘야 한다.테스트가 실패해야할 상황에서는 반드시 실패해야 한다.
훨씬 적은 것을 검사하거나, 심지어는 아무것도 검사하지 않는게 본질적인 문제다.
크게 세가지 경우에 생긴다.
개선방법
@Ignore
annotation 을 달아놔라쉬운 방법을 선택하는 것이 좋으나 정도가 지나칠 수 있다. 쉬운길을 찾다보니 검증 정확도와 정밀도 까지 낮아진것. 변화에 아주 둔감하여 실패할 상황에서도 실패하지 않는다.
테스트는 자신이 명시한 동작에 문제가 생기면 실패해야 한다.
하지만, 지나치게 구체적인 단언문은 자칫 픽셀 퍼펙션 문제를 일으킬 위험이 있다.
assumeTrue
라는 가정 API 를 통해서 의도한 플랫폼이 아닌 경우 테스트를 중단하게 한다.테스트가 하부 플랫폼에 따라 다른 경로를 타고 다른 단언문을 호출하고 있는 상황이다. 냄새의 근원까지 깨끗이 제거해줄 해법은 코드를 리팩토링하는 것 일 수 있다.
테스트의 조건 때문에 이름이 부여하는 것과 다르게 동작하는 현상이다.
발생한 문제를 걸러내는 단언문을 모든 분기마다 빠짐없이 넣어뒀는지 확인해야 한다.