정의

- 자바의 대표적인 단위 테스트 프레임워크로, 다양한 테스트 기능과 유연한 확장성을 제공
- JUnit 4와 달리 모듈화되어 있으며, 여러 컴포넌트가 결합된 구조로 이루어져 있어 유연성과 확장성이 강화됨

장점

1. 유연한 구조
다양한 테스트 엔진과 확장 기능을 통해 사용자가 자유롭게 테스트 환경을 구성할 수 있음

2. 향상된 가독성
@DisplayName, 람다 표현식 등으로 테스트 코드의 가독성을 높일 수 있음

3. 조건부 테스트와 동적 테스트
다양한 테스트 조건과 환경 설정을 지원해 복잡한 테스트 시나리오를 쉽게 다룰 수 있

주요 구성 요소

모듈명 설명
JUnit Platform 테스트를 실행하는 플랫폼
다양한 테스트 엔진과 연동됨
IDE나 빌드 툴(예: Gradle, Maven)과 통합되어, 다양한 환경에서 테스트를 실행하고 결과를 확인할 수 있음
JUnit Jupiter JUnit 5에서 작성하는 새로운 테스트 API
JUnit 5의 모든 테스트와 확장 기능을 제공
JUnit Vintage JUnit 3과 JUnit 4로 작성된 기존 테스트 코드를 실행할 수 있도록 지원하는 모듈
JUnit 5로 마이그레이션되지 않은 코드와의 호환성을 제공

주요 어노테이션

어노테이션 설명
@Test 테스트 메서드를 나타냄
@BeforeEach 각 테스트 메서드가 실행되기 전에 호출됨
JUnit 4의 @Before에 해당
@AfterEach 각 테스트 메서드가 실행된 후 호출됨
JUnit 4의 @After에 해당
@BeforeAll 테스트 클래스 내의 모든 테스트 메서드 실행 후 한 번만 호출됨
메서드는 static이어야 함
@DisplayName 테스트 메서드에 이름을 붙여 가독성을 높임
@Disabled 해당 테스트를 비활성화하여 실행하지 않도록 함
@Tag 특정 테스트 그룹을 설정하여, 원하는 테스트만 선택적으로 실행

import org.junit.jupiter.api.*;

import static org.junit.jupiter.api.Assertions.*;

class CalculatorTest {

    @BeforeAll
    static void setupAll() {
        System.out.println("테스트 시작 전 한 번 실행됩니다.");
    }

    @BeforeEach
    void setup() {
        System.out.println("각 테스트 메서드 전 실행됩니다.");
    }

    @Test
    @DisplayName("덧셈 테스트")
    void testAddition() {
        Calculator calculator = new Calculator();
        assertEquals(5, calculator.add(2, 3), "2 + 3 = 5 여야 합니다.");
    }

    @Test
    @DisplayName("나누기 테스트")
    void testDivision() {
        Calculator calculator = new Calculator();
        assertThrows(ArithmeticException.class, () -> calculator.divide(10, 0), "0으로 나눌 때 예외가 발생해야 합니다.");
    }

    @AfterEach
    void tearDown() {
        System.out.println("각 테스트 메서드 후 실행됩니다.");
    }

    @AfterAll
    static void tearDownAll() {
        System.out.println("테스트 종료 후 한 번 실행됩니다.");
    }
}​


(각 메서드가 올바르게 작동하는지 확인하기 위해 assertEquals와 assertThrows 등의 어서션을 사용)

JUnit 4와 달라진 점

1. 람다 표현식 사용
JUnit 5에서는 Assertions와 Assumptions API가 향상되어 람다 표현식을 활용한 직관적인 코드 작성이 가능

2. 동적 테스트
@TestFactory를 통해 동적으로 테스트를 생성할 수 있음
이는 런타임에 테스트 데이터를 만들어 다양한 경우의 수를 테스트할 때 유용함

3. 조건부 테스트 실행
특정 조건에서만 테스트를 실행하는 @EnabledOnOs, @DisabledOnJre와 같은 어노테이션이 추가되어 운영 체제, JRE 버전 등에 따라 테스트를 설정할 수 있음

4. 확장 기능 (Extensions)
@ExtendWith를 통해 외부 라이브러리와 통합하거나 커스텀 확장을 추가해 테스트 환경을 제어할 수 있

비고

1. 컬렉션도 그렇고 이것도 그렇고 프레임워크가 뭐지? 찾아봐야겠다.
2. 동적테스트가 어떤 건지 감이 잘 안 잡히는데, 더 알아보자.

레퍼런스

1. JUnit5 공식 문서
2. 구글링, 우테코 프리코스 1주차 관련 문서
3. 멘토링 강의, 코드 예시의 경우 ChatGPT

 

'개발지식 조각 > Java' 카테고리의 다른 글

AssertJ  (0) 2024.10.31
JUnit 5과 동적 테스트  (0) 2024.10.31
런타임 예외와 Unchecked Exception  (0) 2024.10.31
추상클래스와 메서드  (0) 2024.10.31
불변 객체  (0) 2024.10.31

+ Recent posts