[java] TestNG를 사용하는 예외 처리와 예외 테스트의 예

TestNG는 Java 기반의 테스트 프레임워크로, 예외 처리와 관련된 테스트를 간편하게 수행할 수 있습니다. 이번 예시에서는 TestNG를 사용하여 예외 처리와 예외 테스트를 다루는 방법에 대해 알아보겠습니다.

예외 처리

1. 예외 발생을 기대하는 테스트 메소드 정의

예외 처리를 확인하기 위해 예외 발생을 기대하는 테스트 메소드를 정의합니다. 아래의 예시에서는 특정 조건에서 ArithmeticException을 발생시키는 dividedByZero 메소드를 테스트합니다.

@Test(expectedExceptions = ArithmeticException.class)
public void dividedByZero() {
    int result = 10 / 0;
}

@Test 어노테이션의 expectedExceptions 속성을 사용하여 예외를 지정할 수 있습니다. 위의 예시에서는 ArithmeticException.class 예외가 발생하는 것을 기대하고, 해당 예외가 발생하지 않으면 테스트는 실패합니다.

2. 예외 처리를 포함한 테스트

예외 처리를 포함한 테스트는 예외가 발생해야 테스트가 성공하는지를 확인합니다. 아래의 예시에서는 입력값이 너무 작은 경우 예외를 던지는 isPositive 메소드를 테스트합니다.

@Test
public void isPositive() {
    int input = -10;
    try {
        if (input <= 0) {
            throw new IllegalArgumentException("Input must be positive");
        }
        assertTrue(true);
    } catch (IllegalArgumentException e) {
        assertEquals("Input must be positive", e.getMessage());
    }
}

이 예제에서는 isPositive 메소드가 음수를 입력받으면 IllegalArgumentException을 던지는 것을 기대합니다. try-catch 블록을 사용하여 예외를 처리하고, assertEquals를 사용하여 예외 메시지를 비교하며 예외 처리를 확인합니다.

예외 테스트

1. 특정 예외 발생 확인

TestNG를 사용하여 특정 예외가 발생하는 것을 확인하는 예제를 살펴보겠습니다. 아래의 예시에서는 divide 메소드가 0으로 나누기 연산을 수행할 때 ArithmeticException이 발생하는 것을 확인합니다.

@Test
public void divideByZero() {
    int divisor = 0;
    try {
        int result = 10 / divisor;
        fail("Expected ArithmeticException but no exception was thrown");
    } catch (ArithmeticException e) {
        assertEquals("/ by zero", e.getMessage());
    }
}

위의 예시에서는 특정 상황에서 발생하는 예외를 확인하기 위해 try-catch 블록을 사용합니다. 예외가 발생하지 않으면 fail 메소드를 통해 테스트를 실패 처리합니다.

2. 예외를 기대하지 않는 경우

예외를 기대하지 않는 경우에는 expectedExceptions 속성을 사용하지 않습니다. 대신 try-catch 블록을 사용하여 예외 발생 유무를 확인합니다. 아래의 예시에서는 특정 조건에서 예외가 발생하지 않는 것을 확인합니다.

@Test
public void notExpectingException() {
    int divisor = 2;
    try {
        int result = 10 / divisor;
        assertTrue(true);
    } catch (ArithmeticException e) {
        fail("Did not expect ArithmeticException but exception was thrown");
    }
}

위의 예시에서는 divisor가 2일 때 나누기 연산을 수행하여 예외가 발생하지 않는 것을 확인합니다. try-catch 블록을 사용하여 예외가 발생하지 않을 경우 assertTrue 메소드를 통해 테스트를 성공 처리합니다.

위의 예시들은 TestNG를 사용하여 예외 처리와 예외 테스트를 수행하는 방법을 보여주고 있습니다. 예외 처리 및 예외 테스트를 통해 소프트웨어의 안정성을 높일 수 있으며, 코드의 예상치 못한 동작을 검증할 수 있습니다.


참고 자료: