꾸준히 기록하자

[Spring] 단위 테스트 (Unit Test) 본문

IT/Spring

[Spring] 단위 테스트 (Unit Test)

seungwonlee 2024. 9. 8. 20:31
728x90

아래 내용은 망나니개발자님의 블로그 내용을 공부하면서 정리한 내용입니다.

https://mangkyu.tistory.com/143

 

[TDD] 단위 테스트(Unit Test) 작성의 필요성 (1/3)

1. 단위 테스트 vs 통합 테스트 차이 [ 단위 테스트(Unit Test) ] 단위 테스트(Unit Test)는 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트이다. 여기서 모듈은 애플리케이션에

mangkyu.tistory.com

단위 테스트(Unit Test)

하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트이며, 모듈은 애플리케이션에서 작동하는 하나의 기능 또는 메서드로 이해할 수 있다. "어떤 기능이 실행되면 어떤 결과가 나온다" 정도로 테스트를 진행하다.

 

통합 테스트(Integration Test)

모듈을 통합하는 과정에서 모듈 간의 호환성을 확인하기 위해 수행되는 테스트이며, 여러 개의 모듈들로 구성이 되고 모듈들끼리 메시지를 주고받으면서 함수 호출 기능을 수행한다. 독립적인 기능에 대한 테스트가 아닌 웹 페이지로부터 API를 호출하여 올바르게 동작을 확인 하는것이다.

 

단위 테스트 작성의 필요성

통합 테스트를 위해서는 캐시, 데이터베이스 등 다른 컴포넌트들과 연결을 해야 하기 때문에 비용이 크다 반면 단위 테스트는 해당 부분만 독립적으로 테스트하기 때문에 어떤 코드를 리팩터링 하여도 빠르게 문제 여부를 확인한다.

 

단위 테스트의 문제점과 stub

일반적으로 애플리케이션에서는 1개의 기능을 처리하기 위해 다른 객체들과 메시지를 주고받는다. 하지만 단위 테스트는 해당 모듈에 대한 독립적인 테스트이기 때문에 다른 객체와 메시지를 주고 받는 경우에 문제가 발생한다. 다른 객체 대신에 가짜 객체(Mock Object)를 주입하여 어떤 결과를 반환하라고 정해진 답변을 준비시키는 것을 stub이라고 한다.

예) DB에 새로운 데이터를 추가하는 코드를 테스트한다면, 가짜 DB(Mock DB)를 주입하여 insert처리 시 반드시 1을 반환하도록 해주는 것이 stub이다.

 

좋은 단위 테스트의 특징

  1. 1개의 테스트 함수에 대해 assert를 최소화하라
  2. 1개의 테스트 함수는 1가지 개념 만을 테스트하라

FIRST라는 5가지 규칙을 따라야 한다.

  • Fast: 테스트는 빠르게 동작하여 자주 돌릴 수 있어야 한다.
  • Independent: 각각의 테스트는 독립적이며 서로 의존해선 안된다.
  • Repeatable: 어느 환경에서도 반복 가능해야 한다.
  • Self-Validating: 테스트는 성공 또는 실패로 결과를 내어 자체적으로 검증한다.
  • Timely: 테스트는 적시에 즉, 테스트하려는 실제코드를 구현하기 직전에 구현해야 한다.
반응형
Comments