본문 바로가기

JAVA

[TDD] UnitTest(단위 테스트)란 무엇인가?

728x90
반응형

단위 테스트(Unit Test)는 소프트웨어 개발 과정에서 개별적인 작은 코드 단위, 즉 "유닛(Unit)"을 독립적으로 검증하는 테스트 방법입니다. 여기서 유닛은 일반적으로 하나의 함수, 메서드, 클래스 또는 모듈을 의미합니다. 단위 테스트는 해당 유닛이 올바르게 작동하는지 확인하는 데 중점을 두며, 소프트웨어 품질을 유지하고 버그를 조기에 발견하는 데 중요한 역할을 합니다.

단위 테스트의 주요 특징

  1. 독립성:
    • 단위 테스트는 독립적으로 실행되어야 하며, 다른 테스트나 외부 시스템(예: 데이터베이스, 네트워크 등)에 의존하지 않아야 합니다.
  2. 작은 범위:
    • 하나의 작은 코드 단위에 집중하여 테스트합니다. 이는 큰 시스템의 복잡성을 줄이고, 버그를 쉽게 식별할 수 있도록 돕습니다.
  3. 자동화:
    • 단위 테스트는 자동화되어 자주 반복적으로 실행할 수 있습니다. 이를 통해 코드 변경 시 새로운 버그가 생기지 않도록 보장합니다.
  4. 빠른 실행:
    • 단위 테스트는 빠르게 실행되도록 설계되어야 합니다. 이는 지속적인 통합(Continuous Integration) 과정에서 개발자에게 신속한 피드백을 제공합니다.

단위 테스트의 장점

구분 내용
초기 버그 발견
  • 개발 초기 단계에서 버그를 발견할 수 있어 수정 비용이 낮습니다.
코드 품질 향상
  • 개발자가 코드를 더 잘 이해하고 유지보수할 수 있게 도와주며, 리팩토링 시 자신감을 제공합니다.
문서화
  • 단위 테스트는 코드의 의도와 사용 방법을 문서화하는 데 도움이 됩니다.
지속적인 통합
  • 자동화된 단위 테스트는 CI/CD 파이프라인에서 필수적인 부분으로, 코드 변경 시 지속적으로 검증할 수 있습니다.
 

단위 테스트 예제 (Java)

Java에서는 단위 테스트를 작성할 때 주로 JUnit이라는 테스트 프레임워크를 사용합니다. 아래 예제는 Java로 작성된 간단한 수학 함수를 테스트하는 단위 테스트를 보여줍니다.

예제 코드: 간단한 수학 함수

// MathFunctions.java

public class MathFunctions {
    public static int add(int a, int b) {
        return a + b;
    }

    public static int subtract(int a, int b) {
        return a - b;
    }
}

단위 테스트 코드

JUnit 5를 사용하여 단위 테스트를 작성합니다.

// MathFunctionsTest.java

import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;

public class MathFunctionsTest {

    @Test
    public void testAdd() {
        assertEquals(3, MathFunctions.add(1, 2));
        assertEquals(0, MathFunctions.add(-1, 1));
        assertEquals(-2, MathFunctions.add(-1, -1));
    }

    @Test
    public void testSubtract() {
        assertEquals(1, MathFunctions.subtract(2, 1));
        assertEquals(0, MathFunctions.subtract(-1, -1));
        assertEquals(-2, MathFunctions.subtract(-1, 1));
    }
}

단위 테스트 실행

JUnit 5를 사용하여 테스트를 실행하려면 다음과 같은 방법을 사용할 수 있습니다.

방법 1: IDE에서 실행

Eclipse, IntelliJ IDEA와 같은 통합 개발 환경(IDE)에서는 테스트 파일을 마우스 오른쪽 버튼으로 클릭하고 "Run as JUnit Test"를 선택하여 테스트를 실행할 수 있습니다.

방법 2: Maven을 사용하여 실행

프로젝트가 Maven을 사용하고 있다면, pom.xml 파일에 JUnit 5 의존성을 추가하고 Maven 명령어를 통해 테스트를 실행할 수 있습니다.

pom.xml에 JUnit 5 의존성 추가

<dependencies>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.7.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.7.0</version>
        <scope>test</scope>
    </dependency>
</dependencies>

Maven 명령어를 사용하여 테스트 실행

mvn test

실행 결과

JUnit 5를 사용하여 테스트를 실행하면 아래와 같은 결과를 확인할 수 있습니다.

[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running MathFunctionsTest
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.007 s - in MathFunctionsTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.532 s
[INFO] Finished at: 2024-07-15T12:00:00Z
[INFO] ------------------------------------------------------------------------
반응형

단위 테스트와 통합 테스트의 차이점

단위 테스트(Unit Test)와 통합 테스트(Integration Test)는 모두 소프트웨어 품질을 보장하기 위해 중요한 테스트 기법이지만, 이 두 가지는 테스트의 범위와 목적에서 차이가 있습니다.

단위 테스트(Unit Test)

단위 테스트는 소프트웨어의 작은 단위, 즉 개별 함수, 메서드, 클래스 또는 모듈을 독립적으로 테스트하는 방법입니다.

주요 특징

  1. 범위: 하나의 작은 코드 단위에 집중합니다.
  2. 독립성: 다른 코드나 외부 시스템(데이터베이스, 네트워크 등)에 의존하지 않습니다.
  3. 목적: 특정 코드 단위가 예상대로 동작하는지 확인합니다.
  4. 속도: 실행이 매우 빠르며, 개발 과정에서 자주 실행됩니다.
  5. 자동화: 자동화하기 쉽고, 지속적인 통합(CI) 시스템의 일환으로 사용됩니다.

통합 테스트(Integration Test)

통합 테스트는 여러 소프트웨어 모듈을 결합하여 이들이 함께 잘 작동하는지 테스트하는 방법입니다. 이는 시스템의 다양한 부분이 상호작용하는 방식을 검증합니다.

주요 특징

  1. 범위: 여러 모듈, 컴포넌트, 서브시스템 등을 포함합니다.
  2. 종속성: 데이터베이스, 파일 시스템, 네트워크, API 등 외부 시스템과의 상호작용을 테스트합니다.
  3. 목적: 시스템의 구성 요소들이 함께 올바르게 작동하는지 확인합니다.
  4. 속도: 단위 테스트보다 실행이 느립니다.
  5. 복잡성: 설정과 관리가 더 복잡하며, 테스트 환경을 준비하는 데 더 많은 시간이 필요할 수 있습니다.

 

728x90
반응형