본문 바로가기
Spring Framework/TDD

단위 테스트 (Unit Test)

by 도쿠니 2022. 6. 21.

단위테스트와 통합테스트

단위 테스트 (Unit Test)

  • 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트
    • 모듈은 클래스가 될 수도, 메소드가 될 수도 있습니다.
    • 다른 모듈과의 의존을 최대한 배제하여 온전히 순수한 모듈 그 자체로만 테스트하도록 해야합니다.
  • 모든 모듈에 대한 각각의 Test Case를 작성하여 모듈이 의도된대로 동작하는지 테스트를 진행합니다.

통합 테스트 (Integration Test)

  • 모듈을 통합하는 과정에서 모듈 간의 호환성을 확인하기 위해 수행되는 테스트
  • 통합된 모듈들이 정상적으로 작동하는지를 테스트합니다.

단위테스트의 필요성

  • 테스팅에 대한 시간과 비용을 절감할 수 있습니다.
    • 통합 테스트의 경우, 여러 모듈 간의 상호작용을 테스트하기 때문에 모든 모듈을 로드하고 구동 및 연결시키는 과정에 의해 상당히 큰 비용(시간)이 듭니다.
    • 단위 테스트의 경우, 테스트하고자하는 부분만 독립적으로 불러와서 테스트하면 되기 때문에 비용이 크지 않습니다.
  • 새로운 기능 추가 시에도 빠르게 테스트할 수 있습니다.
  • 리팩토링 시에 안정성을 확보할 수 있습니다.
  • 코드에 대한 문서가 될 수 있습니다.

단위테스트의 문제점

  • 일반적으로 애플리케이션에서 1개의 기능을 처리하기 위해서는 하나의 객체가 다른 객체와 메세지를 주고 받아야 합니다. 하지만 이는 독립적인 테스트라는 단위테스트 목적에 위배됩니다.
    • 이를 해결하기 위해 진짜 객체 대신 가짜 객체(Mock Object)를 주입하여 특정한 결과를 반환하도록 설정해야합니다. 이를 Stub이라 합니다.
    • 만약 비용이 크지않다면 Stub보다는 실제 객체를 사용하는 것이 좋습니다.
  • 단위 모듈이 잘 동작한다 해서 모듈들이 결합했을 때 잘 동작하리라는 보장은 할 수 없습니다.

좋은 단위 테스트의 특징

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

F.I.R.S.T 원칙

Fast

  • 테스트 코드의 실행은 빠르게 진행되어야 합니다.

Independent

  • 각 테스트는 독립적인 테스트가 가능해야합니다.

Repeatable

  • 동일한 테스트는 동일한 조건에서 항상 동일한 결과를 도출해야 합니다.

Self - Validating

  • 테스트는 부가적인 요소 없이 그 자체로 실행하여 결과를 확인할 수 있어야 합니다.

Timely

  • 단위 테스트는 비즈니스 코드가 완성되기 전에 구성하고 테스트가 가능해야 합니다.
  • 코드가 완성되기 전에 테스트가 따라와야 한다는 TDD의 원칙을 담고 있습니다.

 

 

출처

https://mangkyu.tistory.com/143

'Spring Framework > TDD' 카테고리의 다른 글

Mockito  (0) 2022.06.21
JpaAuditing이 Test할 때 적용이 안되는 경우  (0) 2022.06.12
Junit, Mockito 를 이용한 테스트  (0) 2022.06.11

댓글