JAVA · 테스트
Assertion 심화
JUnit 5의 다양한 어설션 메서드와 활용법입니다.
테스트중급AssertionassertAllassertThrowsassertTimeout
핵심 설명
JUnit 5의 다양한 어설션 메서드와 활용법입니다.
Java code
// import org.junit.jupiter.api.*;
// import static org.junit.jupiter.api.Assertions.*;
// Assertion 패턴 (의사코드)
class AssertionAdvanced {
// 기본 어설션
// assertEquals(expected, actual, "메시지");
// assertNotEquals(a, b);
// assertTrue(condition);
// assertFalse(condition);
// assertNull(obj);
// assertNotNull(obj);
// 예외 어설션
// assertThrows(IllegalArgumentException.class, () -> {
// new User("", "invalid");
// });
// Exception ex = assertThrows(RuntimeException.class, () -> divide(1, 0));
// assertEquals("0으로 나눌 수 없음", ex.getMessage());
// assertDoesNotThrow(() -> new User("valid", "a@b.com"));
// 복합 어설션 (모두 실행 후 결과 수집)
// assertAll("사용자 검증",
// () -> assertEquals("홍길동", user.getName()),
// () -> assertNotNull(user.getEmail()),
// () -> assertTrue(user.getAge() > 0)
// );
// 타임아웃 어설션
// assertTimeout(Duration.ofMillis(100), () -> {
// // 100ms 내에 완료되어야 함
// Thread.sleep(50);
// });
// assertTimeoutPreemptively(Duration.ofMillis(100), () -> {
// // 100ms 초과 시 즉시 중단 (별도 스레드)
// });
public static void main(String[] args) {
System.out.println("assertAll은 실패해도 나머지를 계속 실행합니다.");
System.out.println("개별 assert는 첫 실패에서 멈춥니다.");
}
}학습 팁
assertAll()은 모든 검증을 실행한 후 실패를 모아서 보고합니다. 객체의 여러 필드를 한 번에 검증할 때 유용합니다.
주의할 점
assertTimeout은 같은 스레드에서 실행하고, assertTimeoutPreemptively는 별도 스레드에서 실행합니다. ThreadLocal을 사용하는 코드에서는 차이가 있습니다.
자주 묻는 질문
Assertion 심화란 무엇인가요?
JUnit 5의 다양한 어설션 메서드와 활용법입니다.
Assertion 심화 학습 시 주의할 점은 무엇인가요?
assertTimeout 은 같은 스레드에서 실행하고, assertTimeoutPreemptively 는 별도 스레드에서 실행합니다. ThreadLocal을 사용하는 코드에서는 차이가 있습니다.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.