2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

JUnit의 테스트 케이스 수명주기란 무엇인가요?

_____
Q1: JUnit의 테스트 케이스 수명주기란 무엇인가요?
A1: JUnit의 테스트 케이스 수명주기란 하나의 테스트 메서드가 실행되는 동안 JUnit 프레임워크가 내부적으로 거치는 일련의 단계와 메서드 호출 순서를 말합니다. 이는 테스트 준비(설정), 실행, 정리(해제)를 포함해 테스트가 독립적이고 일관되게 수행되도록 관리하는 과정을 뜻합니다.

Q2: JUnit에서 테스트 수명주기에 포함되는 주요 단계는 무엇인가요?
A2: 주요 단계는 다음과 같습니다:
1. 초기화 단계 : 테스트가 실행되기 전에 필요한 리소스 설정
- `@BeforeAll` (클래스 단위 한 번 실행)
- `@BeforeEach` (각 테스트 메서드 실행 전)
2. 테스트 실행 단계 : 실제 테스트 메서드 실행 (`@Test`)
3. 정리 단계 : 테스트 종료 후 리소스 해제
- `@AfterEach` (각 테스트 메서드 실행 후)
- `@AfterAll` (클래스 단위 한 번 실행)

Q3: `@BeforeAll`과 `@BeforeEach`의 차이는 무엇인가요?
A3: `@BeforeAll`은 테스트 클래스 내 모든 테스트가 수행되기 전에 한 번 실행되는 정적(static) 메서드로, 전체 테스트에 공통된 초기 설정에 사용됩니다.
`@BeforeEach`는 각각의 테스트 메서드가 실행되기 전에 매번 호출되어 각 테스트마다 독립적인 초기화를 수행합니다.

Q4: JUnit 4와 JUnit 5에서 수명주기 관련 어노테이션 차이점은 무엇인가요?
A4: JUnit 4는 `@BeforeClass`, `@Before`, `@After`, `@AfterClass`를 사용합니다. JUnit 5에서는 이들이 `@BeforeAll`, `@BeforeEach`, `@AfterEach`, `@AfterAll`로 이름이 변경되고, 더 유연한 확장성과 제어가 가능하도록 개선되었습니다.

Q5: 수명주기 관리가 중요한 이유는 무엇인가요?
A5: 테스트 수명주기를 관리하면 테스트 간 간섭을 막고, 테스트 환경을 일정하게 유지하며, 리소스를 효율적으로 관리할 수 있습니다. 이는 테스트의 신뢰성과 유지보수성을 높여줍니다.

Q6: 테스트 수명주기 중 예외가 발생하면 어떻게 처리되나요?
A6: 초기화 단계에서 예외가 발생하면 관련 테스트가 스킵되거나 실패로 처리됩니다. 정리 단계도 항상 실행되도록 보장되어, 리소스를 적절하게 해제할 수 있습니다.

Q7: 커스텀 테스트 수명주기를 만들 수 있나요?
A7: 네, JUnit 5는 확장 모델(Extensions API)을 제공하여 커스텀 동작을 수명주기 각 단계에 삽입할 수 있도록 지원합니다. 예를 들어 `TestExecutionListener`나 `Extension` 인터페이스 구현을 통해 가능합니다.
JUnit의 테스트 케이스 수명주기는 테스트 코드가 실행되는 동안 테스트 환경이 어떻게 준비되고 실행되고 정리되는지를 뜻합니다.

즉, 하나의 테스트 메서드가 실행되기 전과 후에 어떤 단계들이 수행되는지를 이해하는 것이 핵심입니다.

JUnit 4와 JUnit 5를 기준으로 공통적이고 중요한 수명주기 단계를 설명하면 다음과 같습니다.

1. 테스트 클래스 인스턴스 생성 테스트 클래스 내의 테스트 메서드를 실행하기 위해서 JUnit은 기본적으로 테스트 클래스의 인스턴스를 생성합니다.

JUnit 4에서는 각 테스트 메서드 실행 시마다 새로운 인스턴스가 만들어지기 때문에 각 테스트는 독립적인 상태를 가집니다.

반면 JUnit 5에서는 `@TestInstance` 어노테이션을 통해 인스턴스 생성 방식을 조정할 수 있습니다 (기본값은 `PER_METHOD`).

2. `@BeforeAll` 메서드 실행 (JUnit 5 기준) / `@BeforeClass` (JUnit

4) 테스트 클래스 내의 모든 테스트가 실행되기 전에 한 번만 실행되는 정적 메서드입니다.

주로 데이터베이스 커넥션 설정, 전역 리소스 초기화와 같이 클래스 전체 테스트에 공통적인 작업을 수행합니다.

JUnit 4에서는 반드시 `static` 메서드이어야 하지만, JUnit 5에서는 테스트 인스턴스 수명주기와 맞춰 `static`이 아닐 수도 있습니다.



3. `@BeforeEach` 메서드 실행 (JUnit

5) / `@Before` (JUnit

4) 각 테스트 메서드 실행 전마다 호출됩니다.

테스트 메서드가 독립적으로 실행되기 위해 필요한 초기화 작업을 수행하는 곳입니다.

예를 들어, 테스트별로 필요한 객체 초기화, 테스트 데이터 세팅 등을 할 때 사용합니다.



4. 테스트 메서드 실행 (`@Test` 어노테이션이 붙은 메서드) 실제 테스트 로직이 실행되는 단계입니다.

테스트 대상 메서드를 호출하여 예상 결과와 실제 결과가 일치하는지 검증(assertion)합니다.



5. `@AfterEach` 메서드 실행 (JUnit

5) / `@After` (JUnit

4) 각 테스트 메서드 실행이 끝난 후 매번 호출되어, 테스트 실행 과정에서 생성된 리소스를 해제하거나 상태를 초기화하는 역할을 합니다.

예를 들어, 임시 파일 삭제, 객체 상태 초기화 등입니다.



6. `@AfterAll` 메서드 실행 (JUnit

5) / `@AfterClass` (JUnit

4) 테스트 클래스 내 모든 테스트 메서드가 실행된 후 단 한 번 호출됩니다.

주로 클래스 단위로 공유한 리소스(예: 데이터베이스 연결)를 정리하거나 종료 작업을 수행합니다.

JUnit 4에서는 `static` 메서드여야 합니다.

보조 설명 - 이러한 수명주기 메서드들은 테스트 실행 환경을 깔끔하고 일관성 있게 유지하기 위한 역할을 합니다.

- JUnit 5에서 지원하는 `@TestInstance` 어노테이션을 활용하면 테스트 클래스의 인스턴스 생성 방식을 변경하여, 한번 생성된 테스트 인스턴스를 여러 테스트 메서드가 공유하도록 할 수도 있습니다.

이 경우 상태 공유 주의가 필요합니다.

- 예외 처리, 조건부 실행(`@Disabled`, `@EnabledIf`), 반복 실행(`@RepeatedTest`), 파라미터화 테스트 등 다양한 확장 기능은 기본적인 수명주기 외에 추가적인 실행 흐름을 제공합니다.

--- JUnit 테스트 케이스 수명주기는 테스트 클래스 준비(`@BeforeAll`), 각 테스트 준비 및 실행(`@BeforeEach` -> `@Test` -> `@AfterEach`), 테스트 클래스 정리(`@AfterAll`)의 순서로 진행되며, 이를 통해 테스트의 격리성 유지와 테스트 환경의 안정성을 담보합니다.

작성자: 박민지 [비회원] | 작성일자: 1년 전 2025-05-26 02:50:42
조회수: 175 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.