Back-End/Java

[Java] JUnit5 기본 Annotation

유자맛바나나 2022. 3. 3. 00:34

 

1. @Test

  • 테스트 메서드임을 나타내는 어노테이션. 테스트 하려는 메서드에 붙여서 사용할 수 있다.
public class MyTestClass {

    @Test
    void myTest1() {
        System.out.println("myTest1");
    }
}

 

 

 

2. @BeforeAll, @AfterAll: 생명주기 어노테이션

2.1. @BeforeAll

  • 클래스가 실행되기 전 한 번만 실행되는 메서드

2.2. @AfterAll

  • 클래스의 모든 테스트 메서드가 실행된 후 한 번만 실행되는 메서드

2.3. @BeforeEach

  • 클래스의 각 테스트 메서드가 실행되기 전 매번 실행되는 메서드

2.4. @AfterEach

  • 클래스의 각 테스트 메서드가 실행된 후 매번 실행되는 메서드

 

@Test 여러개 있을 때 Before/After All과 Before/After Each가 각각 몇번 동작하는지 보여주기

 

3. @Disabled

  • 테스트에 포함시키지 않는 클래스/메서드에 사용
public class MyTestClass {

    @Test
    @Disabled("사용하지 않는 테스트")
    void myTest1() {
        System.out.println("myTest1");
    }
}

 

4. @DisplayName

  • Junit 테스트 결과 창에서 테스트 메서드의 이름 대신 보여주는 문구를 지정
public class MyTestClass {

    @Test
    @DisplayName("메서드 대신 보여줄 내용!")
    void myTest1() {
        System.out.println("myTest1");
    }
}

IntelliJ 실행 화면


5. @RepeatedTest

  • 반복 테스트를 하고싶은 메서드에 사용. @RepeatedTest를 사용할 땐 @Test 어노테이션을 제거한다
  • 성능 테스트를 하기 위해 여러번 실험(테스트)이 필요한 경우 사용할 때 유용하다
  • value 속성
    • 반복 횟수를 지정한다. default 옵션으로 단순 숫자만 쓸 경우 value 값으로 인식한다 (사용 예시1 참고)
  • name 속성
    • @DisplayName의 역할을 한다
    • RepeatedTest가 제공하는 변수를 사용하면 각 테스트의 이름을 알아보기 쉽게 만들 수 있다
      • RepeatedTest.CURRENT_REPETITION_PLACEHOLDER
        : 현재 반복 횟수. "{currentRepetition}"과 동일하다
      • RepeatedTest.TOTAL_REPETITIONS_PLACEHOLDER
        : 전체 반복 횟수. "{totalRepetitions}"와 동일하다
      • RepeatedTest.SHORT_DISPLAY_NAME
        : 간단히(Short) 현재 반복횟수 / 전체 반복 횟수를 나타낸다
      • RepeatedTest.LONG_DISPLAY_NAME
        : '메서드 명을 포함'해 현재 반복횟수 / 전체 반복 횟수를 나타낸다
      • RepeatedTest.DISPLAY_NAME_PLACEHOLDER
        : @DisplayName 어노테이션이 있을 경우 해당 값을 보여주고, 없을 경우 함수명을 나타낸다.
          "{displayName}"과 동일하다

 

사용 예시1

@RepeatedTest(3)

import org.junit.jupiter.api.RepeatedTest;

public class MyTestClass {

    @RepeatedTest(3)
    void myTest1() {

        System.out.println("myTest1");
    }
}

테스트 결과

 

사용 예시2.1

@RepeatedTest(value = 3, name = RepeatedTest.CURRENT_REPETITION_PLACEHOLDER)

import org.junit.jupiter.api.RepeatedTest;

public class MyTestClass {

    @RepeatedTest(value = 3, name = RepeatedTest.CURRENT_REPETITION_PLACEHOLDER)
    void myTest1() {

        System.out.println("myTest1");
    }
}

테스트 결과

 

사용 예시2.2

@RepeatedTest(value = 3, name = "{currentRepetition}")

import org.junit.jupiter.api.RepeatedTest;

public class MyTestClass {

    @RepeatedTest(value = 3, name = "{currentRepetition}")
    void myTest1() {

        System.out.println("myTest1");
    }
}

테스트 결과: 사용 예시 2.1과 동일

 

사용 예시3

@RepeatedTest(value = 3, name = RepeatedTest.LONG_DISPLAY_NAME)

import org.junit.jupiter.api.RepeatedTest;

public class MyTestClass {

    @RepeatedTest(value = 3, name = RepeatedTest.LONG_DISPLAY_NAME)
    void myTest1() {

        System.out.println("myTest1");
    }
}

 

테스트 결과

 

 

[Reference]

JUnit5 Official Doc | https://junit.org/junit5/docs/current/user-guide/

 

JUnit 5 User Guide

Although the JUnit Jupiter programming model and extension model will not support JUnit 4 features such as Rules and Runners natively, it is not expected that source code maintainers will need to update all of their existing tests, test extensions, and cus

junit.org

우아한형제들 테코톡 | https://www.youtube.com/watch?v=EwI3E9Natcw