뭐라도 끄적이는 BLOG

JUnit5 소개 본문

Java/JUnit5

JUnit5 소개

Drawhale 2021. 12. 3. 13:01

JUnit은 Java개발자가 가장 많이 사용하는 테스팅 프레임워크입니다.

 

The State of Developer Ecosystem in 2021 Infographic

The State of Developer Ecosystem 2021 is a detailed report about the programming community, which covers the latest trends in languages, tools, technologies, and lifestyles of developers.

www.jetbrains.com

JUnit5는 Springboot 2.2이후부터 기본 JUnit 버전을 5로 제공하게 되었습니다. 그리고 Java 8 이상을 필요로 합니다.

이 외에 TestNG, Spock등 다양한 대체제가 있지만 JUnit이 가장 많이 사용되고 있습니다.

JUnit4는 하나의 jar파일로 의존성이 들어오고 JUnit4가 참조하는 다른 라이브러리들이 있는 형태였지만 JUnit5부터는 여러 모듈화가 되어 있습니다. JUnit5에서 제공해주는 모듈을 살펴보겠습니다.

JUnit 5는 JUnit Platform, JUnit Jupiter, JUnit Vintage들로 구성되어 있습니다. 각각의 모듈에 대해 간단히 알아보겠습니다.

  • JUnit Platform: 테스트를 실행해주는 런처 제공, TestEngine API제공. 이러한 런처를 통해서 콘솔에서도 실행할 수 있고 intelliJ와 같은 IDE에서 실행을 해주는 것을 가능하게 해줍니다.
  • JUnit Jupiter: TestEngine API 구현체로 JUnit5를 제공합니다.
  • JUnit Vintage: JUnit 4와 3을 지원하는 TestEngine 구현체 입니다.

JUnit5는 Spring boot 2.2이상의 버전으로 프로젝트를 생성하면 기본으로 의존성이 추가 됩니다. 만일 Spring boot를 사용하지 않는다면 Maven Repository에서 의존성을 찾아 추가해야합니다. 이 포스팅에서는 spring boot를 이용할 것이므로 따로 설명을 하지 않겠습니다.

Spring boot로 프로젝트를 생성하면 다음과 같은 파일구조를 볼 수 있습니다.

이미 만들어진 test를 위한 디렉토리에서 JUnit을 사용하여 테스트를 진행하겠습니다.

간단한 테스트를 진행해보도록 하겠습니다.

@SpringBootTest
class JavaApplicationTestApplicationTests {

    @Test
    void create(){
        Study study = new Study();
        assertNotNull(study);
    }

}

JUnit4에서는 public class의 public method만 실행할 수 있었지만 JUnit5부터는 class와 method모두 public이 없어도 실행할 수 있습니다.

 

JUnit5에서 제공하는 주요한 어노테이션은 다음과 같습니다.

  • @Test: 메소드가 테스트 메소드임을 나타냅니다. JUnit4와 달리 속성을 선언하지 않아도 됩니다.
  • @BeforeAll: 테스트들이 실행되기전 딱 한번 호출이 됩니다. JUnit4의 @BeforeClass와 유사합니다.
  • @AfterAll: 모든 테스트들이 실행된후 한번 호출이 됩니다. JUnit4의 @AfterClass와 유사합니다.
  • @BeforeEach: 각각의 테스트를 실행하기 이전에 실행됩니다. JUnit4의 @Before과 유사합니다.
  • @AfterEach: 각각의 테스트를 실행한 후 실행됩니다. JUnit4의 @After와 유사합니다.
  • @Disabled: 테스트를 실행하고 싶지 않을때 추가합니다. JUnit4의 @Ignore와 유사합니다.
@SpringBootTest
class JavaApplicationTestApplicationTests {

    @Test
    void test1(){
        System.out.println("Test1 start!");
    }

    @Test
    void test2(){
        System.out.println("Test2 start!");
    }

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

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

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

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

}

기본적으로 테스트 이름은 테스트 메소드의 이름이 그대로 출력이 됩니다. 그래서 메소드 이름에 _를 붙여가면서 이름을 작성하여 테스트의 목적을 명시해 줄 수 있습니다. 이럴때 테스트 이름에서 _문자를 스페이스로 바꾸어 출력할 수 있습니다. @DisplayNameGeneration을 사용하면 어떤 식으로 테스트 이름을 생성할 것인지 전략을 입력해 줄 수 있습니다. 해당 어노테이션의 인자로 DisplayNameGenerator.ReplaceUnderscores.class을 주면 _문자가 스페이스로 변경되어 출력이 됩니다.

 

이보다 더 좋은 방법은 @DisplayName으로 각 테스트의 이름을 설정해 주는 것입니다. 다양한 문자를 사용할 수 있으며 이모지 또한 넣어 사용할 수 있습니다. @DisplayName을 사용하는것을 더 권장합니다.

@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class)
@SpringBootTest
class JavaApplicationTestApplicationTests {

    @Test
    @DisplayName("테스트1")
    void create_new_test(){
        System.out.println("Test1 start!");
    }

    @Test
    @DisplayName("테스트2")
    void create_new_test2(){
        System.out.println("Test2 start!");
    }

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

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

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

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

}

 


참고 자료

 

 

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

 

더 자바, 애플리케이션을 테스트하는 다양한 방법 - 인프런 | 강의

자바 프로그래밍 언어를 사용하고 있거나 공부하고 있는 학생 또는 개발자라면 반드시 알아야 하는 애플리케이션을 테스트하는 다양한 방법을 학습합니다., 그냥 개발자를 넘어 '더 나은 개발

www.inflearn.com

 

반응형

'Java > JUnit5' 카테고리의 다른 글

JUnit5 조건에 따라 테스트 실행하기  (0) 2021.12.05
JUnit5 Assertions  (0) 2021.12.03