Junit5 기본 사용법 정리

Test / / 2021. 11. 15. 20:28

1. Junit이란??

  • 자바 개발자가 가장 많이 사용하는 테스팅 기반 프레임워크다.
  • JUnit5은 자바8 이상부터 사용이 가능하다.
  • Junit4가 단일 jar이었던거에 비해서, JUnit5는 크게 3가지 모듈로 구성되어있다.
  • JUnit5는 테스트 작성자를 위한 API 모듈과 테스트 실행을 위한 API가 분리되어있다.
    • 예를 들어, JUnit Jupiter는 테스트 코드 작성에 필요한 junit-jupiter-api 모듈과 테스트 실행을 위한 junit-jupiter-engine 모듈로 분리되어 있다.

2. Junit5 구조

  • JUnit Platform: 테스트를 실행해주는 런처와 TestEngine API를 제공함.
  • Jupiter: TestEngine API 구현체로 JUnit5에서 제공함.
  • Vintage: TestEngine API 구현체로 JUnit3, 4에서 제공함.

 

3. Junit5 어노테이션

JUnit5 어노테이션 내용 JUnit4 어노테이션
@Test 테스트 Method임을 선언함. @Test
@ParameterizedTest 매개변수를 받는 테스트를 작성할 수 있음.  
@RepeatedTest 반복되는 테스트를 작성할 수 있음.  
@TestFactory @Test로 선언된 정적 테스트가 아닌 동적으로 테스트를 사용함.  
@TestInstance 테스트 클래스의 생명주기를 설정함.  
@TestTemplate 공급자에 의해 여러 번 호출될 수 있도록 설계된 테스트 케이스 템플릿임을 나타냄.  
@TestMethodOrder 테스트 메소드 실행 순서를 구성하는데 사용함.  
@DisplayName 테스트 클래스 또는 메소드의 사용자 정의 이름을 선언할 때 사용함.  
@DisplayNameGeneration 이름 생성기를 선언함. 예를 들어 '_'를 공백 문자로 치환해주는 생성기가 있음. ex ) new_test -> new test  
@BeforeEach 모든 테스트 실행 전에 실행할 테스트에 사용함. @Before
@AfterEach 모든 테스트 실행 후에 실행한 테스트에 사용함. @After
@BeforeAll 현재 클래스를 실행하기 전 제일 먼저 실행할 테스트 작성하는데,  static로 선언함. @BeforeClass
@AfterAll 현재 클래스 종료 후 해당 테스트를 실행하는데,  static으로 선언함. @AfterClass
@Nested 클래스를 정적이 아닌 중첩 테스트 클래스임을 나타냄.  
@Tag 클래스 또는 메소드 레벨에서 태그를 선언할 때 사용함.  이를 메이븐을 사용할 경우 설정에서 테스트를 태그를 인식해 포함하거나 제외시킬 수 있음.  
@Disabled 이 클래스나 테스트를 사용하지 않음을 표시함. @Ignore
@Timeout 테스트 실행 시간을 선언 후 초과되면 실패하도록 설정함.  
@ExtendWith 확장을 선언적으로 등록할 때 사용함.  
@RegisterExtension 필드를 통해 프로그래밍 방식으로 확장을 등록할 때 사용함.  
@TempDir 필드 주입 또는 매개변수 주입을 통해 임시 디렉토리를 제공하는데 사용함.  

 

4. Jupiter API: assert 메서드

org.junit.jupiter.api.Assertions 클래스는 값 검증을 위한 assert로 시작하는 static 메서드를 제공하고 있다.

  • assertEquals(expected, actual) : int, long 등 기본타입과 Object에 대한 assertEquals 메서드가 존재한다.
  • assertNotEquals(Object unexpected, Object actual)
  • assertTrue(boolean condition)
  • assertFalse(boolean condition)
  • assertNull(Object actual)
  • assertNotNull(Object actual)
  • assertAll() : assert로 여러개 검즘할 때 사용
  • assertThrows(ArithmeticException.class, () -> divide(100,0)) : 실행한 코드에서 특정 익셉션이 발생하는지 확인
  • fail()

5. JUnit5 Assumptions

JUnit5에 새로 추가된 기능으로 Assumptions이 있는데 특정 조건이 충족되는 경우에만 테스트를 할 수 있습니다.

  • 특정 profile, OS에서만 테스트를 실행하는 경우에 활용 가능
  • assumeTrue(), assumeFalse(), and assumingThat() 
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assumptions.assumeTrue;
import static org.junit.jupiter.api.Assumptions.assumingThat;

public class AssumptionTest {

    @Test
    @DisplayName("window에서 테스트 실행")
    void runTest_IfWindonw() {
        assumeTrue(System.getProperty("os.name").startsWith("Windows"));
        assertEquals(2, 2);
    }

    @Test
    @DisplayName("linux에서 테스트 실행")
    void runTest_IfLinux() {
        assumeTrue(() -> System.getProperty("os.name").startsWith("Linux"));
        assertEquals(2, 2);
    }

    @Test
    @DisplayName("지정한 가정을 충족한 경우 지정한 검증을 수행")
    void runTest() {
        String osName = System.getProperty("os.name");
        assumingThat(
                osName.startsWith("Linux"), // (1) 가정 boolean 또는 BooleanSupplier
                () -> assertEquals(1, 2) // (2) 가정을 충족할 때 실행할 코드(Executable 타입)
        );
        assertEquals(1, 1); // (3)
    }

}

 

REFERENCE

https://steady-coding.tistory.com/349

 

JUnit5 필수 개념 정리 (JAVA)

안녕하세요? 코딩중독입니다. 우테코를 진행하면서 JUnit5를 활용한 단위 테스트를 배우고 있는데, 관련된 JUnit5 문법을 정리하기 위해 포스팅을 작성합니다. 혹시나 미흡하거나 틀린 부분은 댓글

steady-coding.tistory.com

https://javacan.tistory.com/entry/JUnit-5-Intro

 

JUnit 5 소개

[갱신] 2018-11-19: junit 5.3.1과 maven-surefire-plugin 2.22.0 버전에 대한 내용 추가 Junit 5 정식 버전이 나왔다. 테스트 코드를 작성하는 개발자 입장에서 JUnit 5를 보면 JUnit 4에 비해 중요한 차이점은..

javacan.tistory.com

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기