TDD 를 하다 보니 테스트 케이스가 많아질 수록 테스트들을 한눈에 읽어내기 어려워졌고,클래스의 메소드별로 한번 더 분류하는 작업에 필요성이 느껴졌다.
그렇다고 해서 하나의 메소드마다 테스트 클래스를 만들기에는 더 혼란 스러워질 것이 분명하기에 다른 방안을 찾아 보았다.
@Nested 어노테이션은 테스트 클래스 내에 inner class를 작성 함으로서 테스트 클래스 내의 테스트 케이스를 분류할 수 있도록 지원하는 라이브러리이다.

@Nested 어노테이션이 달린 inner class는 각각 독립적인 @BeforeEach, @AfterEach 도 소유할 수 있다.
public class NestedTest {
@BeforeEach()
void beforeEach() {
System.out.println("NestedTest.beforeEach()");
}
@Nested
class FirstNestedClass {
@BeforeEach()
void beforeEach() {
System.out.println("FirstNestedClass.beforeEach()");
}
@Test
void test() {
System.out.println("FirstNestedClass.test()");
}
}
@Nested
class SecondNestedClass {
@BeforeEach()
void beforeEach() {
System.out.println("SecondNestedClass.beforeEach()");
}
@Test
void test() {
System.out.println("SecondNestedClass.test()");
}
}
}

위 로그를 보면 테스트 실행시 NestedTest.beforeEach()가 각각의 @Nested inner class 마다 작동하는것을 볼수 있다.


@Nested 적용후에는 테스트 결과Rk 훨씬 잘 정리되어 있음을 알수 있다.