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을 활용하여 버그 없는 안정적인 코드를 작성해보세요! 🚀
추가 학습 자료