단위 테스트(Unit Test)

Gio·2025년 3월 17일
0

단위 테스트란?

단위 테스트란 소스 코드의 특정 모듈(함수, 클래스 등)이 의도된 대로 동작하는지를 검증하는 테스트를 말한다.
JUnit과 같은 도구를 활용해 프로덕션 코드를 작은 단위로 나눠 테스트할 수 있다.

단위 테스트의 특징

  • 빠르고 독립적인 테스트

단위 테스트의 목적은 프로그램을 작은 단위로 나누고 고립시켜 각각의 부분이 잘 동작하는지 확인하는 것이다. 단위 테스트를 자주 진행하면 코드 수정으로 인한 문제 발생 시 어느 부분이 잘못되었는지를 빠르게 캐치할 수 있다.

  • 주석을 대체

내가 이렇듯 주석을 무시하는 이유가 무엇이냐고? 거짓말을 하니까. 항상도 아니고 고의도 아니지만 너무 자주 거짓말을 하니까. 주석은 오래될수록 코드에서 멀어진다. 오래될수록 완전히 그릇될 가능성도 커진다. 이유는 단순하다. 프로그래머들이 주석을 유지하고 보수하기란 현실적으로 불가능하니까.

  • 로버트 C. 마틴 (Robert Cecil Martin), 클린 코드

주석은 프로그래밍 코드에 남긴 메모이다. 이를 통해 프로덕션 코드가 어떤 일을 하는지를 알려줄 수 있다. 문제는 그것에 대한 검증이 없다는 것이다. 반대로 단위 테스트는 코드가 어떤 일을 하는지를 검증한다.

또한 프로덕션 코드의 변경은 테스트 코드의 변경을 야기하기에 최신화된 테스트 코드를 제공할 수 있다. 하지만 프로덕션 코드가 변경되었음에도 주석이 변하지 않는 경우는 흔하다. 단위 테스트로 주석을 대체하면 계속해서 업데이트되는 문서를 제공할 수 있다.

FIRST 원칙에 따른 단위 테스트 작성

FIRST 규칙은 로버트 마틴이 제안한 규칙으로, 효율적이고 깔끔한 단위 테스트를 작성하기 위한 원칙이다.

  1. Fast (빠르게)
    • 단위 테스트는 빨라야 한다. 테스트가 느리면 자주 돌릴 엄두를 못 낸다.
      • 자주 돌리지 않으면 문제를 초기에 찾아낼 수 없다.
  2. Independent (독립적으로)
    • 각 테스트는 서로 의존하면 안 된다.
      • 한 테스트가 다음 테스트가 실행될 환경을 준비해서는 안 된다.
      • 어떤 순서로 실행해도 괜찮아야 한다.
    • 테스트가 서로에게 의존하면 테스트가 실패할 때 원인을 진단하기 어려워진다.
  3. Repeatable (반복가능하게)
    • 테스트는 어떤 환경에서도 반복 가능해야 한다.
      • 네트워크에 연결되지 않은 환경도 포함된다.
    • 테스트가 반복 가능하지 않다면, 테스트를 수행하지 않을 핑계가 생기고 이는 초기에 문제를 찾아낼 수 없게 된다.
  4. Self-Validating (자가검증하는)
    • 테스트의 결과는 성공 또는 실패만 존재해야 한다.
      • 통과 여부를 알기 위해 로그 파일을 읽게 해서는 안 된다.
    • 테스트가 스스로 성공과 실패를 결정하지 않으면 판단이 주관적으로 변한다.
  5. Timely (적시에)
    • 단위 테스트는 실제 코드를 구현하기 직전에 구현해야 한다.
      • 실제 코드를 먼저 구현하면 테스트하기 어려운 코드가 나올 확률이 높다.

REF

예고르 부가옌코 (Yegor Bugayenko), 엘레강트 오브젝트

로버트 C. 마틴 (Robert Cecil Martin), 클린 코드

유닛 테스트

profile
틀린 부분을 지적받기 위해 업로드합니다.

0개의 댓글