PHpullh
학습 라이브러리/Java/Assertion 심화

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 메타데이터를 가집니다.