단위 테스트

깨끗한 코드

책너두 5기 18일차

로버트 C. 마틴의 클린코드 p.161 ~ p.169

내용정리

9. 단위 테스트

깨끗한 코드

도메인에 특화된 테스트 언어

숙련된 개발자라면 자기 코드를 좀 더 간결하고 표현력이 풍부한 코드로 리패터링해야 마땅하다.

이중 표준

테스트 API 코드에 적용하는 표준은 단순하고, 간결하고, 표현력이 풍부해야 하지만, 실제 코드만큼 효율적일 필요는 없다. 실제 환경이 아니라 테스트 환경에서 돌아가는 코드이기 때문이다. 임베디드 시스템에선 컴퓨터 자원과 메모리가 제한적일 가능성이 높지만 테스트 환경은 그럴 가능성이 낮다. 이것이 이중 표준의 본질이다. 코드의 깨끗함과는 철저히 무관하다.

테스트 당 assert 하나

assert 문이 단 하나인 함수는 결론이 하나라서 코드를 이해하기 쉽고 빠르다. 하지만 때에 따라서는 테스트를 두 개로 쪼개 각자가 assert를 수행하는 것이 좋을 때도 있다. assert문을 최대한 줄이는 게 좋지만 때로는 여러개가 나을 때도 있다.

테스트 당 개념 하나

이것저것 잡다한 개념을 연속으로 테스트 하는 긴 함수는 피한다.

F.I.R.S.T.

깨끗한 테스트는 다섯 가지 규칙을 따른다.

Fast(빠르게)

테스트는 빨리 돌아서 자주 돌릴 수 있어야 한다.

Independent(독립적으로)

각 테스트는 서로 의존하면 안된다. 순서에 상관없이 실행될 수 있어야 한다.

Repeatable(반복가능하게)

실제 환경, QA 환경, 네트워크와 무관하게 테스트는 반복 가능해야 한다.

Self-Validating(자가검증하는)

bool 값으로 결과를 내야 한다. 통과 여부를 로그 파일을 읽어서 해석하도록 하면 안된다. 스스로 성공과 실패를 가늠하게 해야 한다.

Timely(적시에)

단위 테스트는 테스트하려는 실제 코드를 구현하기 직전에 구현한다.

결론

테스트 코드는 실제 코드의 유연성, 유지보수성, 재사용성을 보존하고 강화하기 때문에, 지속적으로 깨끗하게 관리하자.

읽고 나서

어제와 이어서 테스트 코드에 대한 규칙들을 배웠다. 가장 중요한 FIRST 규칙은 꼭 알아둬야겠다.