CS/common

[Test] 단위 테스트 vs 통합 테스트 vs 인수 테스트

jisu0708 2024. 1. 23. 15:13

이전부터 진행해온 [모카콩]에서는 단위 테스트와 인수 테스트를 작성하고 최근에 시작한 [Bibbi]에서는 단위 테스트와 통합 테스트를 작성하고 있습니다. 테스트 코드를 작성하면서 이 세 가지 유형의 테스트들이 필요한 이유, 목적을 정확히 파악하는 것이 중요하다 생각하여 해당 글에서 정리하겠습니다.

 

 

1. 단위 테스트

단위 테스트는 시스템에서 논리적으로 분리될 수 있는 가장 작은 코드인 단위를 테스트하는 방법이다.

 

소프트웨어 테스트는 코드 품질을 보장하는 데 도움이 되며 개발의 필수 요소라 할 수 있습니다. 소프트웨어를 작은 기능적 단위로 작성한 다음 코드 단위별 단위 테스트를 작성하는 것이 소프트웨어 개발 모범 사례입니다.

먼저 단위 테스트를 코드로 작성한 다음, 코드를 변경할 때마다 테스트 코드를 자동으로 실행합니다. 테스트가 실패할 경우 버그나 오류가 있는 코드 영역을 빠르게 분리할 수 있습니다.

 

이처럼 단위 테스트는 모듈식 사고 패러다임을 적용하고 테스트 범위와 품질을 개선합니다.

 

 

Java는 주로 JUnut으로 테스트합니다.

JUnit: 자바 프로그래밍 언어용 유닛 테스트 프레임워크로 단정(assert) 메서드로 테스트 케이스의 수행 결과를 판별
@DisplayName("자동차가 전진한다")
@Test
public void moveCar() {
    // given
    Car car = new Car("dani");

    // when
    car.move(4);

    // then
    assertThat(car.getPosition()).isEqualTo(1);
}

 

 

 

2. 통합 테스트

통합 테스트는 소프트웨어 응용 프로그램의 서로 다른 유닛, 모듈 또는 구성 요소를 결합된 개체로 테스트하는 방법이다.

 

통합 테스트는 단위 테스트와 달리 개발자가 변경할 수 없는 부분까지 묶어 검증할 때 사용합니다.

통합 테스트 안에서는 상호 작용하도록 설계된 소프트웨어 시스템의 여러 부분이 올바르게 상호 작용하는지 확인하여 단위 테스트에서 발견하기 어려운 버그를 찾을 수 있습니다. 그럼에도 어디서 에러가 발생했는지 확인하기 어렵다는 단점도 있습니다.

 

 

SpringBoot에서는 클래스 상단에 @SpringBootTest 어노테이션을 붙여 통합 테스트를 수행할 수 있습니다.

 

 

 

3. 인수 테스트

인수 테스트는 사용자 시나리오에 맞춰 수행하는 테스트이다.

 

단위/통합 테스트와 달리 비즈니스 쪽에 초점을 줍니다. 

인수 테스트는 애자일 개발 방법론에서 파생했는데 `누가, 어떤 목적으로, 무엇을 하는가`를 요구하는 시나리오가 정상적으로 동작하는지를 테스트하기에 통합 테스트와는 분류가 다릅니다.

통합테스트의 목적: 개발자가 기능에 결함이 없고 제대로 동작하도록 구현하였는지 검증
인수테스트의 목적: 사용자의 요구사항에 따라 서비스가 제대로 동작하는지 검증

 

 

소프트웨어를 인수할 때, 소프트웨어 내부 구조나 구현 방법을 고려하기보다는 실제 사용자 관점에서 테스트하는 경우가 많습니다. 따라서, 인수 테스트는 소프트웨어 내부 코드에 관심을 가지지 않는 블랙박스 테스트이며 E2E 형식을 이용해 확인합니다.

 

 

Java에서는 RestAssured, MockMvc 같은 도구를 이용해 인수 테스트를 수행할 수 있습니다.

public static ExtractableResponse<Response> 회원_생성_요청(MemberRequest memberRequest) {
    return RestAssured
            .given()
            .contentType(MediaType.APPLICATION_JSON_VALUE)
            .body(memberRequest)
            .when().post("/api/members")
            .then()
            .extract();
}

 

 

 

 

참고: https://aws.amazon.com/ko/what-is/unit-testing/

 

유닛 테스트란? - 유닛 테스트에 대한 설명 - AWS

단위 테스트는 코드의 가장 작은 기능적 단위를 테스트하는 프로세스입니다. 소프트웨어 테스트는 코드 품질을 보장하는 데 도움이 되며, 소프트웨어 개발의 필수 요소입니다. 소프트웨어를 작

aws.amazon.com

https://tecoble.techcourse.co.kr/post/2021-05-25-unit-test-vs-integration-test-vs-acceptance-test/

 

단위 테스트 vs 통합 테스트 vs 인수 테스트

소프트웨어 테스트에는 여러 유형들이 있다. 각 테스트는 목적, 방법 등에 따라 차이점을 가진다. 이번 글에서는 그 중 단위 테스트, 통합 테스트, 인수 테스트에 대해 개념을 정리하려 한다. 단

tecoble.techcourse.co.kr