통합 테스트와 단위 테스트

무지성개발자·2023년 9월 30일
0

단위 테스트

단위 테스트(Unit test)는 하나의 기능(단위)만을 검증하기 위한 테스트를 뜻한다. 하나의 기능(단위)는 정하기 나름이지만 작으면 작을 수록 좋다.

하지만 실제로 코드를 짜다보면 하나의 기능에 여러 의존관계를 가지고 있어 테스트 하기 쉽지 않을 때가 많다. 단위를 의존 관계로 부터 고립시켜서 테스트 하고 싶을 때 사용 하는 것이 테스트 대역(데트스 더블)이다.

테스트 대역(테스트 더블)

테스트 대역은 테스트할 코드가 의존하고 있는 객체를 대신해서 사용하는 객체를 말한다. 테스트 대역은 실제 의존 객체와 같은 기능을 가지고 있지만 최소한의 구현만 해놓는다.

테스트 대역으로 테스트 스텁과 목 오브젝트가 많이 비교 된다.

  • 테스트 스텁(Test Stub)

    • 테스트 대역 객체가 마치 동작하는 것 처럼 보이도록만 만들어 놓은 것.
    • 입력받은 파라메터에 따라 메소드가 호출 되면 미리 정해진 응답을 반환.
  • 목 오브젝트(Mock Object)

    • 기대하는 동작을 하는지 확인하기 위한 테스트 대역.
    • 입력받은 파라메터에 따라 어떤 메소드를 몇번 사용했는지 확인 가능.
  • 차이점

    • 테스트 스텁은 상태 검증이 목적이며 출력 값을 예상 값과 비교함.
    • 목 오브젝트는 행위 검증이 목적이며 어떤 작업을 수행했는지 몇 번 수행했는지 검증.

통합 테스트

통합 테스트(Integration test)는 의존하고 있는 객체들이나 DB, 파일 같은 외부 서비스들을 같이 테스트 하는 것을 말한다. 적어도 두 개 이상의 단위를 결합한 테스트가 되야한다.

  • 외부 리소스를 사용하는 기능.
  • 단위 테스트를 만들기 어려울 때.
  • 단위 테스트는 통과 했지만 분리된 단위가 잘 통신하는지 불확실 할 때.

위 경우에 사용되며, 토비의 스프링에서는 단위 테스트를 먼저 고려하고 통합 테스트를 고려하는 방식으로 테스트를 작성하는걸 권장한다.


한 줄평 : 테스트를 경험해보지 않은 입장에서는 단위 테스트를 고립시키는 것 부터 숨이 턱턱 막힌다...

profile
no-intelli 개발자 입니다. 그래도 intellij는 씁니다.

0개의 댓글