JUnit를 활용한 자바 단위 테스트 작성 방법

JUnit 프레임워크 개요

JUnit는 자바 애플리케이션의 단위 테스트를 지원하는 오픈소스 프레임워크입니다. 가볍지만 강력한 기능을 제공하며, 테스트 자동화와 검증에 널리 사용됩니다. 핵심 구성 요소로는 Test, TestCase, TestSuite가 있습니다.

  • TestCase: 특정 클래스나 메서드를 검증하는 개별 테스트 케이스를 정의합니다.
  • TestSuite: 여러 테스트 케이스를 그룹화하여 일괄 실행할 수 있도록 묶습니다.

환경 설정

최신 버전의 JUnit은 공식 사이트 또는 Maven/Gradle과 같은 빌드 도구를 통해 다운로드할 수 있습니다. 전통적인 방식으로 사용할 경우, 배포된 JAR 파일을 프로젝트의 classpath에 포함시키면 됩니다. 이후 코드에서 JUnit API를 임포트하여 테스트를 작성할 수 있습니다.

기본 테스트 작성 예제

다음은 간단한 계산 기능을 가진 클래스와 그에 대한 단위 테스트 예시입니다.

public class Person {
    public int increment(int value) {
        return value + 1;
    }

    public int decrement(int value) {
        return value - 1;
    }
}

이 클래스를 검증하기 위한 테스트 케이스는 다음과 같이 작성할 수 있습니다.

import junit.framework.TestCase;

public class PersonTest extends TestCase {
    private Person person;

    protected void setUp() throws Exception {
        // 각 테스트 메서드 실행 전 준비 작업
        person = new Person();
    }

    public void testIncrement() {
        int result = person.increment(5);
        assertEquals(6, result);
    }

    public void testDecrement() {
        int result = person.decrement(3);
        assertEquals(2, result);
    }

    protected void tearDown() throws Exception {
        // 각 테스트 메서드 실행 후 정리 작업
        person = null;
    }
}

주요 어설션 메서드

JUnit은 다양한 조건 검사를 위한 어설션 메서드를 제공합니다.

  • assertEquals(expected, actual): 두 값이 같은지 비교합니다.
  • assertTrue(condition): 조건이 참인지 확인합니다.
  • assertFalse(condition): 조건이 거짓인지 확인합니다.
  • assertNull(object): 객체가 null인지 검사합니다.
  • assertNotNull(object): 객체가 null이 아닌지 검사합니다.
  • assertSame(expected, actual): 두 객체가 동일 인스턴스인지 확인합니다.

테스트 스위트를 통한 통합 실행

여러 테스트 케이스를 모아 한 번에 실행하려면 TestSuite를 사용합니다.

방법 1: 전체 클래스 등록

테스트 메서드 이름이 test로 시작할 경우, 해당 클래스 전체를 자동으로 스캔하여 실행합니다.

import junit.framework.Test;
import junit.framework.TestSuite;

public class AllTests {
    public static Test suite() {
        TestSuite suite = new TestSuite("Person 테스트 모음");
        suite.addTestSuite(PersonTest.class);
        return suite;
    }
}

방법 2: 특정 메서드 직접 지정

특정 테스트 메서드만 선택적으로 실행하고자 할 때는, 테스트 클래스에 문자열 기반 생성자를 추가한 후 명시적으로 등록합니다.

public class PersonTest extends TestCase {
    public PersonTest(String name) {
        super(name);
    }
    // 나머지 테스트 메서드는 동일
}

그 후, 원하는 메서드만 포함하는 스위트를 구성합니다.

public class SelectiveTest {
    public static Test suite() {
        TestSuite suite = new TestSuite();
        suite.addTest(new PersonTest("testIncrement"));
        return suite;
    }
}

테스트 실행 방식

JUnit은 다양한 실행 환경을 제공합니다.

  • junit.textui.TestRunner: 콘솔 기반의 텍스트 출력 인터페이스
  • junit.awtui.TestRunner: AWT 기반 GUI
  • junit.swingui.TestRunner: Swing 기반 GUI (더 현대적 UI)

이들 클래스는 TestRunner.run(suite) 형태로 테스트 스위트를 실행할 수 있습니다.

또한, IDE인 Eclipse, IntelliJ IDEA, MyEclipse 등은 JUnit을 내장하고 있어, 마우스 오른쪽 클릭만으로도 테스트 클래스 생성 및 실행이 가능하며, 실시간 결과 확인이 용이합니다.

태그: JUnit java 단위 테스트 TestSuite TestCase

7월 20일 08:02에 게시됨