[개발 일기] 2025.03.13 - @BeforeAll

2025. 3. 13. 13:07·개발 일기

💡 개요

오늘은 Spring에서 테스트 코드에서 데이터 셋업에 사용되는 @BeforeAll을 정리해 보자.

 

 

 

📕 @BeforeAll

@BeforeAll은 테스트 실행 전에 한 번만 실행되는 메서드에 붙이는 어노테이션이다.

 

 

주로 테스트에서 반복적으로 사용되는 데이터를 셋업 할 때 사용된다.

 

 

@BeforeAll을 사용하려면 해당 메서드를 static으로 선언하거나, 클래스에 @TestInstance(TestInstance.Lifecycle.PER_CLASS) 어노테이션을 추가해야 한다.

 

 

 

🛠️ static 메서드 사용

 

@BeforeAll
static void setup() {
    // 테스트 실행 전 한 번만 실행됨
}

 

 

static으로 선언하면 테스트 인스턴스가 생성되기 전에 클래스 레벨에서 실행된다.

 

 

 

🛠️ @TestInstance(TestInstance.Lifecycle.PER_CLASS) 사용

 

그런데 만약 메서드를 static 으로 선언하기 싫다면 테스트 클래스에 @TestInstance(TestInstance.Lifecycle.PER_CLASS) 을 선언하면 된다.

 

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class MyTest {
    
    @BeforeAll
    void setup() { 
        // static 없이 사용 가능
    }
}

 

 

@TestInstance(TestInstance.Lifecycle.PER_CLASS)를 선언하면 클래스 인스턴스 단위로 테스트가 실행되기 때문에, static 없이도 @BeforeAll을 사용할 수 있다.

 

 

참고로 JUnit 테스트 코드의 기본 단위는 PER_METHOD이다.

 

 

그렇기 때문에 메서드 별로 새로운 인스턴스를 생성하는 것이다.

 

 

 

❓ @BeforeAll은 기본적으로 static이 필요한 이유

JUnit은 기본적으로 테스트에 사용되는 메서드마다 새로운 인스턴스를 생성해 사용한다. (이런 방식을 사용해야 모든 테스트가 독립적으로 실행됨)

 

 

그런데 @BeforeAll을 일반 메서드(non-static)로 선언하면, 어떤 객체의 메서드를 실행해야 할지 알 수 없다.

 

 

하지만 static 메서드는 클래스 레벨에서 실행되기 때문에 인스턴스 생성 전에 실행될 수 있다.

 

 

그리고 @TestInstance(TestInstance.Lifecycle.PER_CLASS) 을 사용하면 테스트 클래스의 인스턴스를 메서드 별로 새로 생성하는 것이 아니라 한 번만 생성하기 때문에 static 없이도 사용 가능하다.

 

 

만약 JUnit의 기본 동작(각 테스트 메서드마다 새로운 인스턴스 생성)을 유지하면서 @BeforeAll을 사용하고 싶다면, static을 사용하자..

'개발 일기' 카테고리의 다른 글

[개발 일기] 2025.03.15 - LATERAL JOIN  (0) 2025.03.15
[개발 일기] 2025.03.14 - 인메모리는 휘발성이라매  (0) 2025.03.14
[개발 일기] 2025.03.12 - filter에서 발생하는 예외  (0) 2025.03.12
[개발 일기] 2025.03.11 - compareTo()  (0) 2025.03.11
[개발 일기] 2025.03.10 - 날짜 데이터 타입  (0) 2025.03.10
'개발 일기' 카테고리의 다른 글
  • [개발 일기] 2025.03.15 - LATERAL JOIN
  • [개발 일기] 2025.03.14 - 인메모리는 휘발성이라매
  • [개발 일기] 2025.03.12 - filter에서 발생하는 예외
  • [개발 일기] 2025.03.11 - compareTo()
오도형석
오도형석
  • 오도형석
    형석이의 성장일기
    오도형석
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • MSA 모니터링 서비스
        • DB
      • 스파르타 코딩클럽
        • SQL
        • Spring
      • 백엔드
        • Internet
        • Java
        • DB
      • 캡스톤
        • Django
        • 자연어처리
      • Spring
        • JPA
        • MSA
      • ETC
        • ERROR
      • 개발 일기 N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
오도형석
[개발 일기] 2025.03.13 - @BeforeAll
상단으로

티스토리툴바