본문 바로가기
Java

[Java] JUnit 5 사용법 (2) - 소개, 설정, 기본 메소드 (@Test, @BeforeEach, @AfterEach, @BeforeAll, @AfterAll, @Disabled)

by 노력남자 2022. 9. 6.
반응형

JUnit이 뭔지 알고싶으시다면 이전 포스팅을 확인해주세요.

 

 

[Spring Boot] JUnit이란?

JUnit 이란? 자바 개발자라면 반드시 알고있어야 하는 테스팅 프레임워크 중 하나입니다. 아주 심플하고 직관적인 Kent Beck, Erich Gamma, David Saff, Kris Vasudevan 이 만든 자바 테스팅 프레임워크로 XUnit이

effortguy.tistory.com

 

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, @AfterAllstatic 을 붙혀줘야 합니다. (예외인 경우가 있습니다. 그건 추후에 포스팅하겠습니다.)

 

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에 대해서 알아보겠습니다.

 

읽어주셔서 감사합니다.

반응형

댓글