JUnit이 뭔지 알고싶으시다면 이전 포스팅을 확인해주세요.
JUnit 5란?
JUnit 의 버전 5를 뜻하며 2017년 2월에 출시되어 많은 개발자들이 사용하고 있는 테스팅 프레임워크입니다.
JUnit 5는 이전 버전들과 다르게 3개의 서브 프로젝트 모듈로 이루어져있습니다.
JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
JUnit Platform : TestEngine API, Console Launcher, JUnit 4 based Runner 등 포함
JUnit Jupiter : TestEngine API 구현체로 JUnit 5 구현
JUnit Vintage : TestEngine API 구현체로 JUnit 3, 4 구현
JUnit 5에서 JUnit Vintage 모듈을 포함하고 있어 JUnit 3, 4 문법을 사용할 수 있습니다. 하지만 완벽하게 지원해주는 것이 아니기 때문에 만약 사용한다하면 추가로 작업이 필요합니다.
JUnit 5 설정
Spring Boot 2.2부터 JUnit 5가 기본으로 포함되어 있기 때문에 별도 설정할 필요가 없습니다.
만약 Spring Boot 2.1 이하 버전이거나 Spring Boot를 사용하지 않다면 의존성 추가를 해줘야합니다.
// Maven
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
// Gradle
testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.5.2'
JUnit 5 기본 어노테이션
JUnit 5 에는 테스트를 위해 다양한 어노테이션을 제공하고 있는데 아래에 있는 어노테이션만 알아도 어느정도 테스트가 가능하기 때문에 기본 어노테이션이라고 부르겠습니다.
기본 어노테이션 외에 다른 어노테이션들은 다음 포스팅부터 하나씩 다뤄보겠습니다.
(다른 어노테이션들이 궁금하시다면 https://junit.org/junit5/docs/current/user-guide/#writing-tests-annotations 봐주세요.)
어노테이션 | 설명 |
@Test | 테스트 메소드를 나타내는 어노테이션입니다. 필수로 작성되어야 합니다. |
@BeforeEach | 각 테스트 메소드 시작 전에 실행되어야 하는 메소드에 써줍니다. |
@AfterEach | 각 테스트 메소드 종료 후에 실행되어야 하는 메소드에 써줍니다. |
@BeforeAll | 테스트 시작 전에 실행되어야 하는 메소드에 써줍니다. (static 메소드여야만 함) |
@AfterAll | 테스트 종료 후에 실행되어야 하는 메소드에 써줍니다. (static 메소드여야만 함) |
@Disabled | 실행되지 않아야 하는 테스트 메소드에서 써줍니다. |
예제
JUnit 5 부터는 접근 제한자를 안 붙혀도 IDE에서 자동으로 붙혀줍니다. class, method의 public 생략해도 문제없습니다.
@BeforeAll, @AfterAll은 static 을 붙혀줘야 합니다. (예외인 경우가 있습니다. 그건 추후에 포스팅하겠습니다.)
package com.effortguy.junit5;
import org.junit.jupiter.api.*;
class BasicAnnotation {
@BeforeAll
static void beforeAll() {
System.out.println("-- @BeforeAll");
System.out.println();
}
@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();
}
@Test
void test1() {
System.out.println("---- @Test test1");
}
@Test
void test2() {
System.out.println("---- @Test test2");
}
@Test
@Disabled
void disabled_test() {
System.out.println("---- @Test disabled_test");
}
}
결과
@Disabeld 어노테이션이 붙은 disabled_test() 메소드는 실행이 안 된 걸 볼 수 있습니다.
다음 포스팅에선 테스트명을 변경하는 어노테이션 @DisplayName, @DisplayNameGeneration에 대해서 알아보겠습니다.
읽어주셔서 감사합니다.
댓글