반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- javascript
- vscode
- 인텔리제이
- js
- 배열
- 자바문법
- Array
- junit
- HashMap
- list
- 단위테스트
- input
- Java
- 자바
- html
- math
- 정규식
- Visual Studio Code
- java테스트
- 이클립스
- junit5
- 테스트자동화
- CSS
- string
- 자바스크립트
- json
- 문자열
- Eclipse
- IntelliJ
- ArrayList
Archives
- Today
- Total
어제 오늘 내일
[JUnit] @BeforeAll – 테스트 시작 전 한 번만 수행되는 작업 본문
여러 테스트를 실행할 때, 공통으로 필요한 준비 작업이 있다면 매 테스트마다 반복할 필요가 없습니다. 예를 들어 무거운 리소스 초기화, DB 연결 설정, 환경 설정 로드처럼 비용이 큰 작업이라면 한 번만 실행하는 것이 훨씬 효율적입니다. JUnit에서는 이를 위해 @BeforeAll 기능을 제공합니다.
이 글에서는 @BeforeAll의 역할과 특징, 그리고 실전 예제 중심으로 쉽게 설명합니다.
1. @BeforeAll이란?
@BeforeAll이 붙은 메서드는 테스트 클래스가 실행되기 전 딱 한 번만 실행되는 준비 코드입니다.
테스트 전체에서 공통으로 사용할 리소스나 설정을 초기화할 때 매우 유용합니다.
실행 타이밍
- 테스트 클래스 로딩 → @BeforeAll 실행(1회) → 각 테스트 메서드 실행
2. @BeforeAll 사용 조건
JUnit5에서는 다음 조건을 만족해야 실행됩니다.
- 메서드는 static이어야 함
→ 테스트 인스턴스가 생성되기 전에 실행되기 때문 - 반환 타입은 void
- 인자가 없는 형태로 선언하는 것이 일반적
단, 테스트 클래스에 @TestInstance(TestInstance.Lifecycle.PER_CLASS)를 붙이면 static이 아니어도 실행 가능합니다.
기본 형태
@BeforeAll
static void initAll() {
// 테스트 전체에서 공통으로 사용할 자원 초기화
}
3. 예제: 무거운 초기 작업을 @BeforeAll에서 처리하기
아래 예제는 테스트 전체에서 사용할 데이터베이스 연결 설정을 한 번만 준비하는 경우입니다.
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
class DatabaseTest {
private static DatabaseConnection connection;
@BeforeAll
static void setUpBeforeClass() {
connection = new DatabaseConnection();
connection.connect(); // 무거운 연결 설정
}
@Test
void testSelect() {
String result = connection.select("SELECT name FROM user WHERE id = 1");
assertEquals("Tom", result);
}
@Test
void testInsert() {
boolean success = connection.insert("INSERT INTO user(name) VALUES('Bob')");
assertTrue(success);
}
}
코드 설명
- DatabaseConnection은 테스트 전 한 번만 생성
- 모든 테스트는 동일한 연결을 사용
- 실행 속도 향상 + 자원 낭비 감소
4. @BeforeAll 사용 시 주의할 점
- 전역 상태 공유 주의
- 테스트 간 영향을 줄 수 있으므로 가능한 불변 데이터나 읽기 전용 리소스에 사용
- mutable 데이터를 공유하면 테스트 순서에 따라 결과가 달라질 수 있음
- 테스트 독립성 유지
- @BeforeAll에서 생성한 자원을 테스트들이 수정하지 않도록 주의
- 필요하면 각 테스트가 사용할 객체는 별도로 생성
- 무거운 작업만 넣기
- 가벼운 초기화는 @BeforeEach로 넘기는 것이 테스트 독립성에 유리
- 마지막 정리는 @AfterAll 사용
- @BeforeAll에서 생성한 리소스는 @AfterAll에서 깔끔하게 정리해야 메모리 누수 방지
@AfterAll 예시
@AfterAll
static void tearDownAll() {
connection.close();
}
5. 요약
- @BeforeAll은 테스트 클래스 전체에서 1번만 실행되는 초기 코드
- 무거운 리소스 초기화에 적합
- static 메서드여야 하며, 클래스 생명주기 설정으로 비-static도 가능
- 데이터 공유로 인해 테스트 간 영향을 주지 않도록 주의
반응형
'IT > JUnit' 카테고리의 다른 글
| [JUnit] @TestMethodOrder – 테스트 실행 순서 제어하기 (0) | 2026.01.11 |
|---|---|
| [JUnit] @AfterAll – 전체 테스트 종료 후 한 번만 실행되는 작업 (0) | 2026.01.10 |
| [JUnit] setUp() & tearDown() - 테스트 준비와 정리 단계 이해하기 (0) | 2026.01.09 |
| [JUnit] @Nested를 이용한 테스트 코드 구조화 패턴 (1) | 2026.01.09 |
| [JUnit] @DisplayName으로 테스트를 문서처럼 읽기 좋게 만드는 방법 (0) | 2026.01.08 |
Comments
