[Java] JUnit5
Web/Java

[Java] JUnit5

목차 (클릭시 해당 목차로 이동)


     

     

     

    JUnit5

    세가지 모듈(JUnit Platform + JUnit Jupiter + JUnit Vintage)로 구성된 테스트 라이브러리로, Java 8이상부터 제공합니다.

     

    JUnit Platform

    테스트를 실행해주는 런처를 제공합니다.

     

    • JVM에서 테스트를 하기 위한 기반 역할을 합니다.
    • 테스트 프레임 워크를 개발하기 위한 API를 정의합니다.
      (TestEngine API를 제공)
    • JUnit4 기반 실행 환경을 제공합니다.

     

     

    JUnit Jupiter

     

    • JUnit5에서 새롭게 탄생한 프로그래밍 모델과 확장 모델의 조합입니다.
    • Jupiter 기반 테스트를 실행하기 위한 TestEngine을 제공합니다.
      (TestEngine API의 구현체)

     

     

     

    JUnit Vintage

    • JUnit3, JUnit4 기반 테스트를 실행하기 위한 TestEngine을 제공합니다.
      (TestEngine API의 구현체)

     

     

    JUnit4 와의 차이점

     

    1.

     

    JUnit4는 junit 라이브러리만 정의해주면 되지만 JUnit5는 3개의 모듈로 나눠져 있습니다.

    JUnit4 JUnit5
    All In One JUnit Platform
    JUnit Jupiter
    JUnit Vintage

     

     

     

    2.

     

    JUnit4 JUnit5
    Java 5 이상 Java 8 이상

     

     

    3. 어노테이션

    제공하는 어노테이션에도 차이가 있습니다.

     

    JUnit 5 JUnit 4 Features
    @Test 
    (별도 속성 정의 불가)
    @Test 테스트 메소드 정의
    @BeforeAll @BeforeClass 클래스에 포함된 모든 테스트가 수행하기 전에 실행
    @AfterAll @AfterClass 클래스에 포함된 모든 테스트가 수행한 후에 실행
    @BeforeEach @Before 클래스에 포함된 각각의 테스트가 수행하기 전에 실행
    @AfterEach @After 클래스에 포함된 각각의 테스트가 수행한 후에 실행
    @Disable @Ignore 테스트 클래스 또는 메소드 distable 처리
    @TestFactory N/A dynamic test를 위한 테스트 factory 메소드
    @Nested N/A 클래스 안의 클래스를 선언
    @Tag @Category 테스트 필터링
    @ExtendWith N/A custom extension 등록

     

     

     

     

     

    JUnit5 기능

     

    @Test

    해당 메서드가 테스트 메서드임을 나타냅니다.

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

     

     

     

    assertEquals

     

    assertEquals(x, y)

    객체 x, y가 일치함을 확인합니다.

     

    또한 세번째 파라미터로 실패시 message를 넣어줄 수 있습니다.

     

     

    예시)

    package ch4.assignment;
    
    import org.junit.jupiter.api.*;
    
    import static org.junit.jupiter.api.Assertions.*;
    
    public class JUnit5Test {
    
        @Test
        void test(){
            assertEquals(1, 1);
        }
    
    }

     

     

     

    assertAll

    기존 JUnit4에서는 assert 메소드가 하나라도 실패하면 다음 assert를 실행하지 않았습니다.

    하지만 JUnit5에서는 assertAll 메소드로 여러개의 assert를 실행하고 중간에 실패하더라도 모든 결과를 확인할 수 있도록 합니다.

        @Test
        void assertAllTest() {
            int num = 10;
            assertAll("assertAll test",
                    () -> assertEquals(15, num),
                    () -> assertEquals(13, num),
                    () -> assertEquals(10, num));
    
        }

     

     

    assertThrows

    JUnit4에서 예외검증은 라이브러리를 이용했지만, JUnit5에서는 assertThrows를 제공합니다.

        @Test
        void assertThrowsTest() {
            Exception exception = assertThrows(
                    IllegalStateException.class, () -> {
                        throw new IllegalStateException("message");
                    }
            );
    
            assertEquals("message", exception.getMessage());
        }

     

     

     

     

    테스트 전후 실행 어노테이션

     

    • @BeforeAll : @Test 메소드들이 실행되기 전에 실행
    • @BeforeEach : 각각의 @Test 메소드가 실행되기 전에 실행
    • @AfterAll : @Test 메소드들이 실행된 후에 실행
    • @AfterEach : 각각의 @Test 메소드가 실행된 후에 실행

    주의

    @BeforeAll 이나 @AfterAll을 사용할 때에는 static을 붙여주어야 합니다.

    package ch4.assignment;
    
    import org.junit.jupiter.api.*;
    
    public class JUnit5Test {
        @BeforeAll
        static void beforeAll() {
            System.out.println("BeforeAll");
        }
    
        @BeforeEach
        void beforeEach() {
            System.out.println("BeforeEach");
        }
    
        @Test
        @DisplayName("테스트1")
        void test1() {
            System.out.println("Test1");
        }
    
        @Test
        @DisplayName("테스트2")
        void test2() {
            System.out.println("Test2");
        }
    
        @AfterAll
        static void afterAll() {
            System.out.println("AfterAll");
        }
    
        @AfterEach
        void afterEach() {
            System.out.println("AfterEach");
        }
    }

     

     

     

     

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

    [Java] LinkedList, Stack, Queue  (0) 2021.07.07
    [Java] GitHub API를 이용한 대시보드 만들기  (2) 2021.07.05
    [Java] 제어문  (0) 2021.07.05
    [Java] 연산자  (2) 2021.06.25
    [Java] 자바 데이터타입, 변수 그리고 배열  (2) 2021.06.10