반응형

JUnit 5 시작

스프링 부트 프로젝트 만들기

  • 2.2+ 버전 부터 스프링 부트 프로젝트를 만든다면 기본으로 JUnit 5 의존성이 추가 된다.
    • 이전에는 JUnit 4를 제공

 

  • 스프링 부트 프로젝트 사용하지 않는다면 별도로 JUnit 5를 사용하기 위해서 의존성을 추가해주어야 한다.
<dependency>
	<groupId>org.junit.jupiter</groupId>
	<artifactId>junit-jupiter-engine</artifactId>
	<version>5.5.2</version>
	<scope>test</scope>
</dependency>

 

  • Junit 5 부터는 테스트 클래스, 테스트 메소드, 라이프사이클 메소드에 이제 public 접근 지정자를 적어주지 않아도 된다.
    • private 접근 지정자는 사용할 수 없다.
    • 자바 리플렉션 API를 통해 접근 지정자에 상관없이 클래스, 메소드에 접근 가능하다.

 

  • JUnit 5 기본 애노테이션
    • @Test
      • Test Method
      • 해당 어노테이션이 선언된 메소드는 단위 테스트 메소드임을 나타낸다.
    • @BeforeAll
      • Lifecycle Method
      • 모든 테스트 실행 전 한 번만 호출된다.
      • 해당 애노테이션을 사용하는 메소드는 static을사용해서 구현해야한다.
      • 리턴 타입이 void 이어야 한다.
    • @AfterAll
      • Lifecycle Method
      • 모든 테스트 실행 후 한 번만 호출된다.
      • 해당 애노테이션을 사용하는 메소드는 static을사용해서 구현해야한다.
      • 리턴 타입이 void 이어야 한다.
    • @BeforeEach
      • Lifecycle Method
      • 모든 테스트를 실행할 때, 각각의 테스트를 실행하기 이전에 한 번씩 호출
    • @AfterEach
      • Lifecycle Method
      • 모든 테스트를 실행할 때, 각각의 테스트를 실행한 이후에 한 번씩 호출
    • @Disabled
      • 테스트를 실행할 때 해당 어노테이션이 선언된 메소드는 테스트를 실행하지 않는다.
  • Display Names (테스트 이름 표현 관련)
    • @DisplayNameGeneration
      • Method와 Class 레퍼런스를 사용해서 테스트 이름을 표기하는 방법 설정.
      • 테스트 클래스에 해당 어노테이션을 설정하면 클래스의 테스트 메소드 모두 적용.
      • 기본 구현체로 ReplaceUnderscores 제공
    • @DisplayName
      • 어떤 테스트인지 테스트 이름을 보다 쉽게 표현할 수 있는 방법을 제공하는 애노테이션.
      • @DisplayNameGeneration 보다 우선 순위가 높다.

 

JUnit 5 예제

//junit 5 부터는 테스트 클래스, 테스트 메소드, 라이프사이클 메소드가 public일 필요가 없다. private 사용 불가능.
@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) //Underscore를 빈 공백으로 치환
class FooTest {
    @Test
    void create_new_foo() {
        Foo foo = new Foo();
        System.out.println("create");
    }

    @Test
    @Disabled //해당 테스트를 실행하지 않겠다고 설정하는 애노테이션
    void create_new_foo_again() {
        System.out.println("create1");
    }

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

    @Test
    @DisplayName("\uD83D\uDC7E foo 만들기 \uD83D\uDC7E")
    void create3() {
        System.out.println("create3");
    }

    /**
     * 모든 테스트 실행전 단 한번 호출된다.
     * static 메소드로 구현해야한다.
     * return type void
     */
    @BeforeAll
    static void beforeAll() {
        System.out.println("beforeAll");
    }

    /**
     * 모든 테스트 실행된 이후 단 한번 호출된다.
     * static 메소드로 구현해야한다.
     * return type void
     */
    @AfterAll
    static void afterAll() {
        System.out.println("afterAll");
    }

    /**
     * 모든 테스트를 실행할 때,
     * 각각의 테스트를 실행하기 이전에 한 번씩 호출
     */
    @BeforeEach
    void beforeEach() {
        System.out.println("beforeEach");
    }

    /**
     * 모든 테스트를 실행할 때,
     * 각각의 테스트를 실행한 이후에 한 번씩 호출
     */
    @AfterEach
    void afterEach() {
        System.out.println("afterEach");
        System.out.println();
    }

}

 

테스트 결과


[참고자료]

더 자바, 애플리케이션을 테스트하는 다양한 방법, 백기선

JUnit 5 User Guide

Annotation Type BeforeAll

반응형

+ Recent posts