어제 오늘 내일

[JUnit] setName() – 테스트 이름 변경하기 본문

IT/JUnit

[JUnit] setName() – 테스트 이름 변경하기

hi.anna 2026. 1. 14. 08:18

JUnit3 기반의 테스트 구조에서는 테스트 메소드 이름이 테스트 식별자의 핵심 역할을 했습니다.
따라서 테스트 실행 중 이름을 변경하거나, 특정 조건에 따라 동적으로 이름을 바꾸고 싶을 때 사용하는 메소드가 setName()입니다.

JUnit4 이후로는 거의 사용되지 않는 레거시 기능이지만,
레거시 테스트 유지보수 시 반드시 알아야 하는 개념입니다.

 

1. setName()이란?

setName()은 현재 테스트 인스턴스에 저장된 테스트 이름을 변경하는 메소드입니다.
JUnit3의 TestCase에서 제공되며, 생성자 또는 테스트 실행 흐름 중에 호출할 수 있습니다.

특징

  • 테스트 실행 중 이름을 동적으로 수정 가능
  • 스위트 구성 시 테스트 이름 변경에 활용됨
  • 로그, 테스트 보고서 커스터마이징에 사용

 

2. JUnit3에서 setName() 기본 사용 예제

JUnit3에서는 테스트 클래스가 TestCase를 상속받고 있으며
각 테스트는 “이름을 가진 인스턴스”로 관리됩니다.

예제 코드

import junit.framework.TestCase;

public class RenameTest extends TestCase {

    public RenameTest(String name) {
        super(name);
    }

    public void testOriginalName() {
        System.out.println("변경 전 테스트 이름: " + getName());
        setName("testChangedName");
        System.out.println("변경 후 테스트 이름: " + getName());

        assertEquals(5, 2 + 3);
    }
}

실행 결과

변경 전 테스트 이름: testOriginalName
변경 후 테스트 이름: testChangedName

설명

  • 생성자로 받은 테스트 이름이 초기 값
  • setName()을 호출하여 테스트 이름을 변경
  • 변경된 이름은 TestResult에도 그대로 기록됨

 

3. 테스트 스위트 구성 시 이름 변경하기

여러 테스트 클래스를 하나의 스위트로 구성할 때
테스트 이름을 보기 좋게 바꿀 수 있습니다.

예제

import junit.framework.*;

public class MySuite {
    public static Test suite() {
        TestSuite suite = new TestSuite();

        TestCase test = new MyTest("testAdd");
        test.setName("Addition Test"); // 이름 변경

        suite.addTest(test);
        return suite;
    }
}

사용 의도

  • 보고서나 콘솔 출력에서 의미 있는 이름으로 표시
  • 테스트 시나리오 기반 실행을 할 때 가독성 향상

 

4. JUnit4 이후에는 어떻게 될까?

JUnit4부터는 테스트 메소드가 리플렉션 기반으로 실행되기 때문에
getName() / setName() 같은 방식이 더 이상 사용되지 않습니다.

대신 다음 방법들이 존재합니다.

JUnit4: @Rule TestName

@Rule
public TestName name = new TestName();

@Test
public void testMethod() {
    System.out.println(name.getMethodName());
}

→ 테스트 이름 변경은 불가능함 (반드시 메소드명 기반)

JUnit5: TestInfo 사용

@Test
void test(TestInfo info) {
    System.out.println(info.getDisplayName());
}

JUnit5에서도 테스트 이름 변경 기능은 기본 제공하지 않습니다.

대신 @DisplayName을 통해 사용자 친화적인 이름을 부여할 수 있습니다.

@DisplayName("사용자 등록 테스트")
@Test
void createUser() { }

 

 

5. setName() 사용 시 주의할 점

  1. JUnit3 전용 기능
    • JUnit4, JUnit5에서는 사용할 수 없음
    • 레거시 코드 유지보수용으로만 필요
  2. 이름 변경 시 테스트 보고서 가독성에 영향
    • 변경된 이름은 TestResult / Failure 로그에도 반영됨
    • 잘못 사용하면 디버깅 시 혼란 발생 가능
  3. 테스트 이름 변경은 신중하게 사용
    • 테스트 식별자가 바뀌기 때문에 자동화 도구와의 연동에 영향 줄 수 있음
  4. JUnit5에서는 @DisplayName을 사용하는 것이 더 안전
    • 실행 이름은 메소드명 그대로 유지
    • 표시되는 이름만 바꾸기 때문에 혼란 없음

 

6. 정리

  • setName()은 JUnit3의 TestCase 기반에서 테스트 이름을 변경하는 메소드
  • 동적으로 테스트 이름을 바꾸거나 스위트 구성 시 유용
  • JUnit4/5에서는 사용되지 않으며, @DisplayName이 그 역할을 대체
  • 레거시 환경에서만 등장하는 개념이지만, 유지보수 시 반드시 알아야 함

 

 

반응형
Comments