어제 오늘 내일

[JUnit] suite() 메소드 – 테스트 묶음 구성 패턴 본문

IT/JUnit

[JUnit] suite() 메소드 – 테스트 묶음 구성 패턴

hi.anna 2026. 1. 12. 01:09

JUnit5에서는 @Suite 기반으로 테스트 스위트를 구성하지만,
JUnit4 시절에는 suite() 메소드를 이용해 테스트 묶음을 직접 구성하는 패턴이 널리 사용되었습니다.
레거시 프로젝트나 JUnit4 기반 테스트를 유지보수하는 경우 여전히 자주 마주치는 방식입니다.

이번 글에서는 JUnit4의 suite() 메소드 패턴을 중심으로 개념과 예제를 정리합니다.

 

1. suite() 메소드란?

JUnit4에서 여러 테스트 클래스를 한 번에 묶어 실행하기 위해 사용하는 정적 팩토리 메소드입니다.
테스트 클래스 안에 suite() 메소드를 만들고 그 안에서 테스트 스위트를 구성하여 반환하는 방식입니다.

이 방식은 다음과 같은 특징을 가집니다.

  • 테스트를 프로그래밍적으로 구성할 수 있음
  • 필요한 테스트만 유연하게 선택 가능
  • @RunWith(Suite.class)보다 더 세밀한 제어 가능

JUnit5에서는 deprecated된 개념이지만, JUnit4 프로젝트 유지보수 시 반드시 알고 있어야 하는 패턴입니다.

 

2. suite() 메소드 기본 구조

JUnit4의 TestSuite 클래스와 suite() 메소드를 조합하여 사용합니다.

예제

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

public class AllTests {

    public static Test suite() {
        TestSuite suite = new TestSuite("전체 테스트 스위트");
        suite.addTestSuite(UserServiceTest.class);
        suite.addTestSuite(OrderServiceTest.class);
        suite.addTestSuite(ProductServiceTest.class);
        return suite;
    }
}

설명

  • TestSuite 객체 생성
  • addTestSuite()로 테스트 클래스 등록
  • 최종적으로 TestSuite를 반환
  • 스위트 클래스(AllTests)를 실행하면 전체 테스트 실행 가능

이 방식은 JUnit3 스타일이지만 JUnit4와 혼용되어 사용되기도 했습니다.

 

3. 패키지 단위로 묶기

테스트 클래스가 많을 때 패키지 전체를 스캔해서 묶는 방식도 사용할 수 있습니다.

실전 예제

public static Test suite() {
    TestSuite suite = new TestSuite("서비스 레이어 테스트");

    suite.addTestSuite(UserServiceTest.class);
    suite.addTestSuite(OrderServiceTest.class);

    // 하위 패키지 테스트 추가 가능
    suite.addTest(new TestSuite(com.example.service.payment.PaymentTest.class));

    return suite;
}

특징

  • 원하는 클래스만 선택적으로 추가
  • 여러 패키지를 조합해 하나의 테스트 묶음 구성 가능

 

4. Suite 클래스와 비교: 왜 suite()가 필요한가?

JUnit4에는 @RunWith(Suite.class) + @SuiteClasses 방식도 있습니다.

@RunWith(Suite.class)
@Suite.SuiteClasses({
        UserServiceTest.class,
        OrderServiceTest.class
})
public class ServiceSuite {}

두 방식의 차이

방식 장점 단점
suite() 메소드 프로그래밍적으로 스위트 구성 가능, 조건·필터링 가능 코드 길어짐, JUnit5에서는 비권장
@Suite + @SuiteClasses 간단하고 직관적 동적 제어 어려움

즉, suite() 패턴은

  • 동적으로 테스트를 구성하거나
  • 특정 조건에 따라 테스트 포함 여부를 결정할 때

유리했습니다.

 

5. suite() 메소드 사용 시 주의할 점

  1. JUnit5에서는 더 이상 사용되지 않는 패턴
    • 유지보수 코드에서만 사용해야 함
    • 신규 코드에는 JUnit5의 @Suite 사용 권장
  2. 테스트 누락 위험
    • 수동으로 테스트를 추가해야 하므로 테스트 추가 누락 가능
    • 패키지 구조 변경 시 즉시 반영 필요
  3. IDE 자동 검색 기능과 충돌 가능성
    • 일부 IDE는 JUnit5 기준으로 동작하므로 TestSuite가 자동 인식되지 않을 수 있음
  4. 스위트 실행 시간이 길어질 수 있음
    • 여러 테스트를 한 번에 실행하기 때문에 무거운 테스트가 섞여 있으면 전체 실행이 오래 걸림

 

6. JUnit5에서 대체 방식

JUnit5에서는 suite() 메소드가 사라지고 다음과 같은 방식 사용:

@Suite
@SelectClasses({
        UserServiceTest.class,
        OrderServiceTest.class
})
class ServiceSuite {}

기능은 동일하지만 사용성이 훨씬 간단하고 현대적인 방식입니다.

 

7. 정리

  • suite() 메소드는 JUnit4에서 테스트 묶음을 구성하기 위해 사용되던 전통적인 패턴
  • TestSuite 객체를 직접 만들어 테스트를 등록하는 방식
  • JUnit5에서는 @Suite로 대체되었지만 레거시 코드 유지보수에 여전히 필요
  • 선택적으로 테스트를 추가하거나 동적 구성할 때 유용

 

#태그

# ## # ####

반응형
Comments