JUnit

Kkd·2025년 2월 6일
1

매일메일 개념정리

목록 보기
80/93

JUnit이란?

JUnitJava 애플리케이션의 단위 테스트(Unit Test)를 자동화하는 프레임워크입니다.
테스트 코드를 작성하여 기능이 올바르게 동작하는지 검증하고, 코드 품질을 향상시키는 데 사용됩니다.
현재 JUnit은 JUnit 5 (Jupiter)가 최신 버전입니다.


1. JUnit의 주요 특징

단위 테스트(Unit Test) 자동화
어노테이션(@Test, @BeforeEach 등)을 활용한 직관적인 테스트 코드 작성
테스트 케이스를 독립적으로 실행 가능
테스트 실행 결과(성공/실패)를 자동으로 확인
Spring Boot와 함께 통합 테스트 가능


2. JUnit의 주요 어노테이션

JUnit은 다양한 어노테이션을 제공하여 테스트 실행을 간편하게 관리할 수 있습니다.

어노테이션설명
@Test테스트 메서드를 나타냄
@BeforeEach각 테스트 실행 전에 실행 (초기화 작업)
@AfterEach각 테스트 실행 후 실행 (정리 작업)
@BeforeAll모든 테스트 실행 전에 1번 실행 (static 필요)
@AfterAll모든 테스트 실행 후 1번 실행 (static 필요)
@DisplayName("설명")테스트 실행 시 보기 쉽게 이름 지정
@Disabled특정 테스트를 비활성화 (Skip)
@RepeatedTest(n)테스트를 n번 반복 실행

3. JUnit 기본 사용법

3.1. JUnit 5 의존성 추가

Maven

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <scope>test</scope>
</dependency>

Gradle

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter'
}

3.2. 기본적인 테스트 코드 예제

import org.junit.jupiter.api.*;

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

class CalculatorTest {

    @BeforeAll
    static void beforeAll() {
        System.out.println("모든 테스트 실행 전 한 번 실행됨");
    }

    @BeforeEach
    void setUp() {
        System.out.println("각 테스트 실행 전 실행됨");
    }

    @Test
    @DisplayName("덧셈 테스트")
    void testAddition() {
        int result = 2 + 3;
        assertEquals(5, result, "2 + 3은 5여야 한다.");
    }

    @Test
    @DisplayName("뺄셈 테스트")
    void testSubtraction() {
        int result = 10 - 5;
        assertEquals(5, result, "10 - 5는 5여야 한다.");
    }

    @Test
    @Disabled
    void disabledTest() {
        fail("이 테스트는 실행되지 않음");
    }

    @AfterEach
    void tearDown() {
        System.out.println("각 테스트 실행 후 실행됨");
    }

    @AfterAll
    static void afterAll() {
        System.out.println("모든 테스트 실행 후 한 번 실행됨");
    }
}

실행 흐름
1. @BeforeAll → 전체 테스트 실행 전 1회 실행
2. @BeforeEach → 각 테스트 실행 전 실행
3. @Test → 개별 테스트 실행 (testAddition(), testSubtraction())
4. @AfterEach → 각 테스트 실행 후 실행
5. @AfterAll → 전체 테스트 실행 후 1회 실행

📌 출력 예시

모든 테스트 실행 전 한 번 실행됨
각 테스트 실행 전 실행됨
각 테스트 실행 후 실행됨
각 테스트 실행 전 실행됨
각 테스트 실행 후 실행됨
모든 테스트 실행 후 한 번 실행됨

4. JUnit의 다양한 Assertions (검증 메서드)

JUnit에서 테스트 결과를 확인할 때 Assertion(단언문)을 사용합니다.

메서드설명
assertEquals(a, b)a == b인지 확인
assertNotEquals(a, b)a != b인지 확인
assertTrue(condition)조건이 true인지 확인
assertFalse(condition)조건이 false인지 확인
assertNotNull(obj)객체가 null이 아닌지 확인
assertNull(obj)객체가 null인지 확인
assertThrows(Exception.class, () -> 실행 코드)예외 발생 여부 확인

Assertion 예제

@Test
void testAssertions() {
    assertEquals(4, 2 + 2, "2 + 2는 4여야 한다.");
    assertTrue(5 > 3, "5는 3보다 커야 한다.");
    assertNotNull("JUnit", "값이 null이면 안 된다.");
}

예외 발생 테스트

@Test
void testException() {
    Exception exception = assertThrows(ArithmeticException.class, () -> {
        int result = 10 / 0;
    });

    assertEquals("/ by zero", exception.getMessage());
}

5. JUnit과 Spring Boot 연동

Spring Boot에서 JUnit을 활용하여 서비스, 리포지토리, 컨트롤러 테스트를 수행할 수 있습니다.

5.1. Spring Boot 테스트 환경 설정

Spring Boot 의존성 추가 (Maven)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

Spring Boot 테스트 코드 예제

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import static org.assertj.core.api.Assertions.*;

@SpringBootTest
class MyServiceTest {

    @Test
    void testExample() {
        String result = "Hello, JUnit!";
        assertThat(result).isEqualTo("Hello, JUnit!");
    }
}

📌 Spring Boot 테스트 특징
@SpringBootTest → 스프링 컨텍스트를 로드하여 테스트 실행
assertThat()AssertJ 라이브러리를 사용한 가독성 높은 검증


6. JUnit 4 vs JUnit 5 차이점

비교 항목JUnit 4JUnit 5 (Jupiter)
어노테이션@Test@Test (동일)
설정 어노테이션@Before, @After@BeforeEach, @AfterEach
클래스 레벨 설정@BeforeClass, @AfterClass@BeforeAll, @AfterAll (static 필요)
테스트 실행 엔진JUnit 4JUnit Jupiter
Dynamic Test 지원✅ (@TestFactory)
병렬 실행✅ (@Execution(CONCURRENT))

📌 JUnit 5는 더 유연하고 확장성이 높음 → 가능하면 JUnit 5 사용 추천! 🚀


7. 결론

JUnit은 Java의 표준 단위 테스트 프레임워크
@Test 어노테이션을 사용하여 테스트 코드 작성
다양한 Assertion(검증 메서드) 활용 가능
Spring Boot와 통합하여 단위 테스트 & 통합 테스트 수행 가능
JUnit 5(Jupiter) 버전 사용 권장

🚀 JUnit을 활용하여 버그 없는 안정적인 코드를 작성해보세요! 🚀


추가 학습 자료

profile
🌱

0개의 댓글