JUnit은 Java 애플리케이션의 단위 테스트(Unit Test)를 자동화하는 프레임워크입니다.
테스트 코드를 작성하여 기능이 올바르게 동작하는지 검증하고, 코드 품질을 향상시키는 데 사용됩니다.
현재 JUnit은 JUnit 5 (Jupiter)가 최신 버전입니다.
✅ 단위 테스트(Unit Test) 자동화
✅ 어노테이션(@Test, @BeforeEach 등)을 활용한 직관적인 테스트 코드 작성
✅ 테스트 케이스를 독립적으로 실행 가능
✅ 테스트 실행 결과(성공/실패)를 자동으로 확인
✅ Spring Boot와 함께 통합 테스트 가능  
JUnit은 다양한 어노테이션을 제공하여 테스트 실행을 간편하게 관리할 수 있습니다.
| 어노테이션 | 설명 | 
|---|---|
@Test | 테스트 메서드를 나타냄 | 
@BeforeEach | 각 테스트 실행 전에 실행 (초기화 작업) | 
@AfterEach | 각 테스트 실행 후 실행 (정리 작업) | 
@BeforeAll | 모든 테스트 실행 전에 1번 실행 (static 필요) | 
@AfterAll | 모든 테스트 실행 후 1번 실행 (static 필요) | 
@DisplayName("설명") | 테스트 실행 시 보기 쉽게 이름 지정 | 
@Disabled | 특정 테스트를 비활성화 (Skip) | 
@RepeatedTest(n) | 테스트를 n번 반복 실행 | 
✅ 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'
}
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회 실행  
📌 출력 예시
모든 테스트 실행 전 한 번 실행됨
각 테스트 실행 전 실행됨
각 테스트 실행 후 실행됨
각 테스트 실행 전 실행됨
각 테스트 실행 후 실행됨
모든 테스트 실행 후 한 번 실행됨
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());
}
Spring Boot에서 JUnit을 활용하여 서비스, 리포지토리, 컨트롤러 테스트를 수행할 수 있습니다.
✅ 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 라이브러리를 사용한 가독성 높은 검증  
| 비교 항목 | JUnit 4 | JUnit 5 (Jupiter) | 
|---|---|---|
| 어노테이션 | @Test | @Test (동일) | 
| 설정 어노테이션 | @Before, @After | @BeforeEach, @AfterEach | 
| 클래스 레벨 설정 | @BeforeClass, @AfterClass | @BeforeAll, @AfterAll (static 필요) | 
| 테스트 실행 엔진 | JUnit 4 | JUnit Jupiter | 
| Dynamic Test 지원 | ❌ | ✅ (@TestFactory) | 
| 병렬 실행 | ❌ | ✅ (@Execution(CONCURRENT)) | 
📌 JUnit 5는 더 유연하고 확장성이 높음 → 가능하면 JUnit 5 사용 추천! 🚀
✅ JUnit은 Java의 표준 단위 테스트 프레임워크
✅ @Test 어노테이션을 사용하여 테스트 코드 작성
✅ 다양한 Assertion(검증 메서드) 활용 가능
✅ Spring Boot와 통합하여 단위 테스트 & 통합 테스트 수행 가능
✅ JUnit 5(Jupiter) 버전 사용 권장  
🚀 JUnit을 활용하여 버그 없는 안정적인 코드를 작성해보세요! 🚀
추가 학습 자료