[단위테스트] 수동 테스트 vs 자동화 테스트 : Junit5, AssertJ

y001·2025년 1월 19일
post-thumbnail

1. 단위 테스트란 무엇인가?

단위 테스트(Unit Test) 는 애플리케이션의 가장 작은 단위(클래스, 메서드)를 독립적으로 테스트하는 과정입니다. 개발자가 작성한 코드가 기대한 대로 동작하는지 확인하며, 주로 하나의 특정 기능에 초점을 맞춥니다.

단위 테스트의 주요 목적:

  • 코드의 동작을 빠르게 확인할 수 있음.
  • 개발 초기 단계에서 버그를 발견할 가능성이 높아짐.
  • 리팩토링이나 기능 추가 시 변경된 코드가 기존 기능에 영향을 미치지 않도록 보장.

2. 수동 테스트

먼저, 수동 테스트로 단위 테스트를 시도해보겠습니다. 아래는 간단한 수동 테스트 코드입니다:

@Test
void parkVehicle() {
    ParkingLotSystem parkingLotSystem = new ParkingLotSystem();
    parkingLotSystem.parkVehicle(new Vehicle("ABC-1234"));

    // 결과를 사람이 직접 확인
    System.out.println(">>> 주차된 차량 수: " + parkingLotSystem.getVehicles().size());
    System.out.println(">>> 주차된 차량 번호: " + parkingLotSystem.getVehicles().get(0).getLicensePlate());
}

수동 테스트의 과정:
1. 테스트 코드를 실행합니다.
2. System.out.println을 통해 출력된 결과를 사람이 직접 확인합니다.

문제점:

  • 사람이 직접 결과를 확인하므로 오류를 놓칠 가능성이 있습니다.
  • 테스트 결과가 기록으로 남지 않아 반복 검증이 어렵습니다.
  • 시간이 많이 소모됩니다.

3. 자동화된 테스트로 개선하기

수동 테스트의 비효율성을 해결하기 위해, 자동화된 테스트를 사용합니다. 자동화된 테스트는 다음과 같은 장점을 제공합니다:

  • 실행과 검증이 자동으로 이루어져 사람이 개입할 필요가 없습니다.
  • 테스트 결과가 기록으로 남아 반복 실행이 가능합니다.
  • CI/CD 파이프라인과 통합하여 지속적인 품질 보장이 가능합니다.

아래는 JUnit5와 AssertJ를 사용하여 동일한 테스트를 자동화한 코드입니다:

@Test
@DisplayName("주차 자동 테스트")
void parkVehicle() {
    ParkingLotSystem parkingLotSystem = new ParkingLotSystem();
    parkingLotSystem.parkVehicle(new Vehicle("XYZ-5678"));

    // AssertJ를 활용하여 자동으로 결과 검증
    assertThat(parkingLotSystem.getVehicles()).hasSize(1);
    assertThat(parkingLotSystem.getVehicles().get(0).getLicensePlate()).isEqualTo("XYZ-5678");
}

4. JUnit5와 AssertJ

JUnit5AssertJ는 자바 기반의 테스트 환경에서 널리 사용되는 도구입니다. 각각의 역할과 기본 사용법은 다음과 같습니다.

(1) JUnit5

  • 자바에서 가장 널리 사용되는 테스트 프레임워크로, 단위 테스트를 작성할 때 사용됩니다.
  • 주요 애너테이션:
    • @Test: 테스트 메서드로 선언.
    • @BeforeEach: 각 테스트 실행 전 초기화 작업.
    • @AfterEach: 각 테스트 실행 후 정리 작업.
@BeforeEach
void setUp() {
    parkingLotSystem = new ParkingLotSystem();
}

@Test
void parkVehicle() {
    parkingLotSystem.parkVehicle(new Vehicle("LMN-9012"));
    assertThat(parkingLotSystem.getVehicles()).hasSize(1);
}

(2) AssertJ

  • 테스트 코드의 가독성을 높이는 유창한 API를 제공합니다.
  • assertThat 메서드를 통해 직관적으로 검증 가능.
  • 실패 시 명확한 메시지를 출력하여 디버깅을 돕습니다.
@Test
void assertJExample() {
    List<String> vehicles = List.of("DEF-3456", "JKL-7890");
    assertThat(vehicles)
        .hasSize(2)                          // 리스트 크기 검증
        .contains("DEF-3456")               // 특정 값 포함 여부 검증
        .doesNotContain("MNO-1111");        // 특정 값 미포함 여부 검증
}

📌 이 글은 TDD 강의를 학습한 내용을 바탕으로 재구성하였습니다. 문제가 되는 부분이 있다면 수정하겠습니다.

0개의 댓글