[클린코드] 경계, 단위 테스트

danbi lee·2025년 7월 18일

개발자북클럽

목록 보기
20/21

TIL 3줄 요약

테스트 코드는 실제 코드만큼이나 프로젝트 건강에 중요하다.
테스트코드는 실제 코드의 유연성, 유지보수성, 재사용성을 보존하고 강화하기 때문이다.
그러므로 테스트 코드는 지속적으로 깨끗하게 관리하자.

TIL 날짜

2025.07.18

오늘 읽을 범위

  1. 경계
  2. 단위 테스트

책에서 기억하고 싶은 내용

경계

학습 테스트: 먼저 간단한 테스트 케이스를 작성해 외부 코드를 익히면 어떨까?

  • log4j 패키지를 사용
  • 패키지 새 버전이 나올 때 우리 코드와 호환되는지 학습 테스트로 위험 예방하기

단위 테스트

TDD(Test Driven Development): 테스트를 먼저 작성하고, 그 테스트를 통과하는 최소한의 코드를 작성하는 개발 방법론
  • TDD 법칙 세 가지
    1. 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다.
    2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.
    3. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.
  • 실제 코드와 맞먹을 정도로 방대한 테스트 코드는 심각한 관리 문제를 유발하기도 한다.
  • 깨끗한 테스트 코드 유지하기
    • 테스트 코드를 깨끗하게 짰다면 테스트에 쏟아 부은 노력은 허사로 돌아가지 않는다.
    • 테스트는 유연성, 유지보수성, 재사용성을 제공한다.테스트케이스가 없다면 모든 변경이 잠정적인 버그다.
    • 명료성 + 단순성 + 풍부한 표현력 = 가독성
  • 테스트당 개념 하나
    • 테스트 함수마다 한 개념만 테스트하라
    • 이렇게 표현하면 테스트 코드 속에 감춰진 일반적인 규칙이 보인다.
  • F.I.R.S.T
    • 빠르게(Fast): 테스트가 느리면 자주 돌릴 엄두를 못 낸다.
    • 독립적으로(Independent): 각 테스트는 독립적으로 그리고 어떤 순서로 실행해도 괜찮아야 한다.
    • 반복가능하게(Repeatable): 실제 환경, QA 환경, 퇴근길 노트북 환경에서도 실행할 수 있어야한다.
    • 자가검증하는(Self-Validating): 테스트는 bool 값으로, 성공 아니면 실패로 결과를 내야 한다.
    • 적시에(Timely): 단위 테스트는 테스트하려는 실제 코드를 구현하기 직전에 구현한다.

오늘 읽은 소감

지난 프로젝트에서 테스트 코드를 실무에 처음 도입해봤다. 확실히 운영 오류가 줄었다. 테스트 코드의 중요성을 깨닫게 되었지만 새로운 프로젝트에서는 귀찮음이 커서 바로 서비스 로직을 개발해버렸다. 테스트 케이스는 한 줄도 쓰지 않았다. 마음이 뜨끔해진다. 처음에 품을 들이면 오픈 이후 덜 바빠지니까 정신 차리고 추가하자.
테스트 케이스는 여럿이서 작업하는 프로젝트에서 더욱 빛을 발한다. 내가 건드린 부분이 혹여나 다른 작업자의 코드에 영향을 끼치지 않을까 하는 우려와 불안감이 줄어들고, 기획 요구사항대로 구현되었는지 개념별로 확인이 가능하다. 이번엔 테스트 커버리지까지 신경쓰면서 작업을 해봐야겠다!
그리고 라이브러리나 프레임워크 버전업을 할 때 오류가 나지 않을까 싶어서, 솔직히 큰 문제 없으면 나도 건드리지 않는 편이긴 한데... log4j 테스트로 확인하는거 좋은 방법인 것 같다..! 그리고 assert문을 단 하나인 함수로 만드는건 오바같고 assert문 수를 최소로 줄이는건 동감한다.

나의 최애 북틸

profile
계속해서 보완중

0개의 댓글