[JUnit 5] 개요 및 기본 애너테이션

JUnit 5 개요

JUnit 5 모듈

Untitled


JUnit Platform

  • 테스트를 실행해주는 런처를 제공한다.
  • TestEngine API를 제공한다.


Jupiter

  • TestEngine API 구현체이다. (JUnit Platform 구현체이다.)
  • JUnit 5를 제공한다.
  • 스프링부트 2.2 이상의 버전으로 프로젝트 생성시, 자동으로 의존성 추가된다.
    • spring-boot-starter 에 포함되어 있다.


Vintage

  • TestEngine API 구현체이다. (JUnit Platform 구현체이다.)
  • JUnit 4와 3를 지원한다.




기본 애너테이션

기본 애너테이션 종류

JUnit 5가 제공하는 기본 애너테이션은 다음과 같다.

  • @Test
  • @BeforeAll
  • @AfterAll
  • @BeforeEach
  • @AfterEach
  • @Disabled
  • @DisplayName



전체 예시 도메인

  • 애너테이션 설명을 하기 전, 예시 코드에 대한 기본 전제 코드를 설명하겠다.

자세한 것은 Github 참고 (최상단 내용 링크 참고)


Study 클래스

public class Study {

    private StudyStatus studyStatus = StudyStatus.DRAFT;
    private int limit;
    private String name;

    public Study() {
    }

    public Study(int limit) {
        if (limit < 0) {
            throw new IllegalArgumentException("limit은 0보다 작을 수 없다.");
        }
        this.limit = limit;
    }

    public Study(int limit, String name) {
        this.limit = limit;
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public StudyStatus getStudyStatus() {
        return this.studyStatus;
    }

    public int getLimit() {
        return limit;
    }

    @Override
    public String toString() {
        return "Study{" +
                "studyStatus=" + studyStatus +
                ", limit=" + limit +
                ", name='" + name + '\'' +
                '}';
    }
}


StudyStatus ENUM 클래스

public enum StudyStatus {
    DRAFT, STARTED, ENDED, OPENED
}



@BeforeAll

기능

  • 전체 테스트 메서드가 실행되기 전에, 단 한번만 실행된다.
  • 적용할 메서드는 static 으로 선언해야 한다.
  • 적용할 메서드의 반환 값은 void이어야 한다.


예시 코드

//import 생략

public class StudyTest {
	@BeforeAll
  static void beforeAll() {
    System.out.println("StudyTest.beforeAll");
  }

	@Test
  void create() {
    System.out.println("StudyTest.create1\n");
    Study study = new Study();
    assertNotNull(study);
  }
}



@AfterAll

기능

  • 전체 테스트 메서드가 실행되고 난 후에, 단 한번만 실행된다.
  • 적용할 메서드는 static 으로 선언해야 한다.
  • 적용할 메서드의 반환 값은 void이어야 한다.


예시 코드

//import 생략

public class StudyTest {
	@AfterAll
  static void afterAll() {
    System.out.println("StudyTest.afterAll");
  }

	@Test
  void create() {
    System.out.println("StudyTest.create1\n");
    Study study = new Study();
    assertNotNull(study);
  }
}



@BeforeEach

기능

  • 각 테스트 메서드가 실행되기 전, 각 테스트 메서드마다 실행된다.


예시 코드

//import 생략

public class StudyTest {

	@BeforeEach
  void beforeEach() {
    System.out.println("StudyTest.beforeEach");
  }

	@Test
  void create() {
    System.out.println("StudyTest.create1\n");
    Study study = new Study();
    assertNotNull(study);
  }
}


@AfterEach

기능

  • 각 테스트 메서드가 실행되고 난 후, 각 테스트 메서드마다 실행된다.


예시 코드

//import 생략

public class StudyTest {

	@AfterEach
  void afterEach() {
    System.out.println("StudyTest.afterEach");
  }

	@Test
  void create() {
    System.out.println("StudyTest.create1\n");
    Study study = new Study();
    assertNotNull(study);
  }
}



@Disabled

기능

  • 해당 테스트 메서드를 비활성화한다.
  • 전체 테스트 수행시 제외된다.


예시 코드

//import 생략

public class StudyTest {

	@Test
  void create1() {
    System.out.println("StudyTest.create1\n");
    Study study = new Study();
    assertNotNull(study);
  }

	@Disabled
	@Test
  void create2() {
    System.out.println("StudyTest.create1\n");
    Study study = new Study();
    assertNotNull(study);
  }
}



@DisplayName

기능

  • 어떤 테스트인지 테스트 이름을 보다 쉽게 표현할 수 있는 방법을 제공하는 애너테이션이다.
  • @DisplayNameGeneration 대신 권장되는 애너테이션이다.


예시 코드

//import 생략

public class StudyTest {

	@DisplayName("Study 객체 생성")
	@Test
  void create1() {
    System.out.println("StudyTest.create1\n");
    Study study = new Study();
    assertNotNull(study);
  }

}




  • 본 게시글은 백기선님의 강의를 토대로 정리한 글입니다.
  • 더 자세한 내용을 알고 싶으신 분들이 계신다면, 해당 강의를 수강하시는 것을 추천드립니다.