[JUnit] @Nested

dnwlsrla40·2021년 11월 11일
0

JUnit

목록 보기
2/2

Spring으로 단위 테스트를 진행하다보면 비슷한 관심사를 가진 코드가 보인다. 똑같은 기능을 하지만 결과가 성공/실패, 같은 실패지만 다른 Exception을 던지는 test code들이 그렇다.

@Nested

JUnit5에선 @Nested를 이용해 Inner Class로 비슷한 함수를 묶어주면서 계층적 Test를 제공해 위 문제를 해결한다.

JUnit5 User Guide - Nested Test 부분

@Nested tests give the test writer more capabilities to express the relationship among several groups of tests. Such nested tests make use of Java’s nested classes and facilitate hierarchical thinking about the test structure.

Before @Nested

이처럼 @Nested가 나오기 전에는 test 코드들이 많아 질수록 가독성이 안좋아지고 비슷한 테스트가 여기저기 흩어져 있는 경우도 많았다.

public class DisplayNameTest {

    @Test
    public void testAsuccess() { /* */ }

    @Test
    public void testAfail() { /* */ }

    @Test
    public void test1success() { /* */ }

    @Test
    public void test1success() { /* */ }

    @Test
    public void test2success() { /* */ }

    @Test
    public void test2fail() { /* */}
}

After @Nested

@Nested를 사용하면 비록 코드는 길어졌지만, 같은 관심사 별로 한 번에 모아볼 수 있고 계층 구조라 훨씬 가독성이 증가했다. 추가로 Inner Class 내부에 Field 값과 @BeforeEach를 활용하면 동일한 test를 하기 위한 동일한 초기화 및 설정을 한 번에 해줄 수 있다.

public class DisplayNameTest {

    @Nested
    class testA {

        @Test
        public void success() { /* */ }

        @Test
        public void fail() { /* */ }
    }

    @Nested
    class testNumber {

        @Nested
        class test1 {

            @Test
            public void success() { /* */ }

            @Test
            public void fail() { /* */ }
        }

        @Nested
        class test2 {

            @Test
            public void success() { /* */ }

            @Test
            public void fail() { /* */ }

        }
    }
}

출처

  1. JUnit5 User Guide : JUnit5 User Guide - Nested Test 부분
  2. 뱀귤님의 blog : [Spring] JUnit 5 에서 @Nested 와 @DisplayName 으로 가독성 있는 테스트 코드 작성하기

0개의 댓글