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

JUnit에서 @Nested 클래스를 사용하는 방법은?

_____
JUnit에서 @Nested 클래스를 사용하는 방법에 대한 FAQ

Q1: @Nested 클래스란 무엇인가요?
A1: @Nested는 JUnit 5에서 지원하는 어노테이션으로, 하나의 테스트 클래스 내에 중첩된 테스트 클래스를 정의할 때 사용합니다. 이를 통해 관련 테스트를 그룹화하고, 논리적으로 테스트 케이스를 구조화할 수 있습니다.

Q2: @Nested 클래스를 사용하는 기본 문법은 어떻게 되나요?
A2: @Nested 어노테이션을 중첩된 클래스에 붙이고, 이 클래스 안에 테스트 메서드를 정의합니다. 예를 들어:

```java
class OuterTest {

@BeforeEach
void setupOuter() {
// Outer setup
}

@Test
void outerTest() {
// 테스트 코드
}

@Nested
class InnerTest {
@BeforeEach
void setupInner() {
// Inner setup
}

@Test
void innerTest() {
// 중첩 테스트 코드
}
}
}
```

Q3: @Nested 클래스를 사용할 때 주의할 점은?
A3:
- @Nested 클래스는 반드시 non-static 인스턴스 클래스여야 합니다. static 클래스로 선언하면 정상 작동하지 않습니다.
- 중첩 클래스 내부에서도 @BeforeEach, @AfterEach, @Test 등 일반적인 JUnit 어노테이션을 사용할 수 있습니다.
- @Nested 클래스는 상위 클래스 컨텍스트를 공유하기 때문에, 상위 클래스 멤버에 접근할 수 있습니다.

Q4: @Nested를 사용하면 어떤 이점이 있나요?
A4:
- 테스트를 계층적, 논리적으로 그룹화하여 가독성이 높아집니다.
- 복잡한 테스트 시나리오를 단계별로 나누어 관리할 수 있습니다.
- 공통 설정을 상위 클래스에서 수행하고, 특정 상황별 설정은 중첩 클래스에서 처리할 수 있습니다.

Q5: 여러 단계로 중첩해서 사용할 수 있나요?
A5: 네, @Nested 클래스를 여러 단계로 중첩할 수 있습니다. 하지만 너무 깊은 중첩은 코드 가독성을 떨어뜨릴 수 있으니 적절한 수준에서 사용하는 것이 좋습니다.

Q6: 예제를 통해 @Nested 클래스 사용법을 보여주세요.
A6:

```java
import org.junit.jupiter.api.*;

class CalculatorTest {

Calculator calculator;

@BeforeEach
void setup() {
calculator = new Calculator();
}

@Test
void addTest() {
Assertions.assertEquals(5, calculator.add(2, 3));
}

@Nested
@DisplayName("Subtraction Tests")
class SubtractionTests {

@Test
void subtractPositiveNumbers() {
Assertions.assertEquals(1, calculator.subtract(3, 2));
}

@Nested
@DisplayName("Negative Numbers Subtraction")
class NegativeNumbers {

@Test
void subtractNegative() {
Assertions.assertEquals(-5, calculator.subtract(-3, 2));
}
}
}
}
```

Q7: @Nested 클래스가 JUnit 4에서도 가능한가요?
A7: 아니요, @Nested 어노테이션은 JUnit 5의 기능입니다. JUnit 4에서는 중첩 테스트를 지원하지 않습니다.

---

이상으로 JUnit의 @Nested 클래스 사용법에 대해 자주 묻는 질문과 답변을 정리했습니다.
JUnit에서는 테스트 클래스를 계층적으로 조직하기 위해 @Nested 애노테이션을 제공합니다.

@Nested를 사용하면 테스트 케이스를 그룹화하여 보다 구조적이고 읽기 쉬운 테스트 코드를 작성할 수 있습니다.

이를 통해 관련된 테스트들을 하나의 바깥 클래스 안에 여러 개의 중첩된 테스트 클래스로 나누어 관리할 수 있습니다.

@Nested 클래스 사용 방법 1. 바깥 테스트 클래스에 작성 @Nested 클래스를 선언하기 위해서는 먼저 일반적인 @Test 애노테이션을 사용하는 테스트 클래스를 만듭니다.



2. 중첩 클래스에 @Nested 애노테이션 추가 바깥 테스트 클래스 내에 `static`이 아닌 인스턴스 중첩 클래스를 만들고, 해당 클래스에 `@Nested` 애노테이션을 붙입니다.

이 중첩 클래스 내에서 테스트 메서드를 작성합니다.

중요한 점은 @Nested 클래스는 반드시 non-static(inner) 클래스여야 한다는 점입니다.



3. 테스트 메서드는 @Test 붙여서 작성 @Nested 내부 클래스 내에서 각각의 테스트 케이스는 @Test 애노테이션을 붙여서 작성합니다.



4. 설정 메서드도 사용할 수 있음 @BeforeEach, @AfterEach, @BeforeAll, @AfterAll도 중첩 클래스 내에서 사용할 수 있는데 `@BeforeAll`과 `@AfterAll`은 static으로 선언해야 하며, 중첩 클래스가 non-static이므로 static 메서드 선언 시에는 `@TestInstance(Lifecycle.PER_CLASS)` 애노테이션을 중첩 클래스에 붙여야 할 수 있습니다.

@Nested 사용의 장점 - 논리적 그룹화 : 관련 테스트들을 논리적인 단위로 묶어 가독성과 유지보수성을 높임 - 가독성 향상 : 테스트 계층이 명확해져서 어떤 테스트가 어떤 상황을 시험하는지 쉽게 인지 가능 - 상태 공유 가능 : 바깥 클래스 멤버에 접근할 수 있어서 초기 세팅을 공유하기 용이 간단한 예시 코드 ```java import org.junit.jupiter.api.*; class CalculatorTest { Calculator calculator; @BeforeEach void setUp() { calculator = new Calculator(); } @Nested class AddOperation { @Test void shouldAddTwoPositiveNumbers() { Assertions.assertEquals(5, calculator.add(2,

3)); } @Test void shouldAddNegativeAndPositiveNumber() { Assertions.assertEquals(1, calculator.add(-2,

3)); } } @Nested class SubtractOperation { @Test void shouldSubtractTwoNumbers() { Assertions.assertEquals(1, calculator.subtract(3,

2)); } } } ``` 위 예제에서 `CalculatorTest`는 바깥 테스트 클래스이고, `AddOperation`, `SubtractOperation`이 각각 `@Nested` 애노테이션이 붙은 테스트 그룹입니다.

이렇게 하면 더 명확하게 어떤 테스트가 어떤 기능 단위를 검증하는지 구분할 수 있습니다.

요약 - @Nested 는 JUnit5에서 제공하는 중첩 테스트 클래스 애노테이션 - 중첩 클래스는 non-static이어야 하며, 내부에 @Test 메서드를 가질 수 있음 - 테스트를 논리적인 그룹으로 묶어 깔끔하고 읽기 쉬운 테스트 구조 가능 - 바깥 테스트 클래스의 필드나 메서드에 접근 가능 - 설정 및 정리 메서드도 중첩 클래스 내에서 사용할 수 있음 이처럼 @Nested 클래스를 적절히 활용하면 복잡한 테스트 클래스를 체계적으로 관리할 수 있습니다.

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