
핵심: JUnit은 자바 단위 테스트 표준 프레임워크.
초기 버그를 빠르게 잡고, TDD(테스트 주도 개발)를 실천하는 데 필수 도구
| 비교 항목 | JUnit 4 | JUnit 5 (Jupiter) |
|---|---|---|
| 패키지 | org.junit | org.junit.jupiter |
| 생명주기 애노테이션 | @Before, @After | @BeforeEach, @AfterEach |
| 클래스 전/후 | @BeforeClass, @AfterClass | @BeforeAll, @AfterAll |
| 비활성화 | @Ignore | @Disabled |
| 어설션 | Assert.assertEquals() | Assertions.assertEquals() |
@Test : 테스트 메서드@BeforeEach / @AfterEach : 각 테스트 전/후@BeforeAll / @AfterAll : 클래스 단 한 번 전/후(정적 메서드)@DisplayName("설명") : 보기 좋은 테스트 이름@RepeatedTest(n) : 반복 실행assertEquals(expected, actual)assertTrue(condition) / assertFalse(condition)assertNotNull(obj) / assertNull(obj)assertAll(…) : 여러 어설션 한 번에import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class ExampleTest {
@Test
void testAddition() {
int result = 1 + 1;
assertEquals(2, result);
}
}
import org.junit.jupiter.api.*;
import java.util.*;
class ExampleTest {
private List<String> list;
@BeforeEach
void setUp() {
list = new ArrayList<>();
list.add("Hello");
}
@AfterEach
void tearDown() {
list.clear();
}
@Test
void testList() {
assertEquals(1, list.size());
assertTrue(list.contains("Hello"));
}
}
assertAll()로 다중 검증import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class AssertAllExample {
@Test
void testPersonAttributes() {
Person person = new Person("John", 25);
assertAll("Person",
() -> assertEquals("John", person.getName()),
() -> assertEquals(25, person.getAge()),
() -> assertNotNull(person)
);
}
}
assertThrows)import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class ExceptionTest {
@Test
void testException() {
IllegalArgumentException ex = assertThrows(
IllegalArgumentException.class,
() -> { throw new IllegalArgumentException("null"); }
);
assertEquals("null", ex.getMessage()); // 또는 assertNotNull(ex.getMessage());
}
}
JUnit의 어설션을 플루언트 API로 보강 → 가독성/표현력 ↑
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.*;
class AssertJExample {
@Test
void testString() {
String str = "Hello, AssertJ!";
assertThat(str)
.isNotEmpty()
.contains("Hello")
.endsWith("AssertJ!");
}
}
장점
Red → Green → Refactor 세 단계로 설계를 이끈다.
| 단계 | 설명 |
|---|---|
| 🔴 Red | 실패하는 테스트 먼저 작성 |
| 🟢 Green | 테스트를 통과하는 최소한의 코드 작성 |
| 🟡 Refactor | 중복 제거·가독성 개선·구조 개선 |
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class CalculatorTest {
@Test
void add() {
Calculator calc = new Calculator();
assertEquals(2, calc.add(1, 1));
}
}
class Calculator {
int add(int a, int b) {
return a + b;
}
}
Given-When-Then 서술 추천)