Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

JUnit 4에서 Exception 테스트 하기

테스트 케이스를 작성할때 동작에 대한 테스트도 작성하지만 예외상황에 대해서 적절한 예외가 제대로 발생하는지도 테스트 하려면 예외에 대한 테스트도 해야 합니다.


@Test(expected=NoPermissionException.class)
public void testException() throws Exception {
    App app = new App();
    app.occurException();
}

JUnit 3에서는 좀 지저분하게 try-catch문으로 짜야 하는데 JUnit 4에서는 애노테이션을 사용해서 위처럼 간단히 작성할 수 있습니다. 테스트 메서드안에 로직을 넣고 애노테이션에서 발생할 예외클래스를 적어주면 해당 Exception이 발생하면 성공으로 나오게 됩니다.



예외에서 적절한 메시지를 던져주어서 메시지 까지 확인해야 하는 경우에는 위와같은 방법은 사용할 수 없습니다. JUnit 4.7부터는 아래와 같이 @Rule이라는 기능을 작용해서 이런 경우의 처리를 할 수 있도록 지원하고 있습니다.(@Rule은 여러가지 용도로 사용될 수 있는 듯 한데 처음 사용해 봐서 다른 부분은 나중에...)


// Exception Class
public class UserCustomException extends Exception {
    public UserCustomException(String message) {
        super(message);
    }
}


// App Class
public void occurExceptionWithMessage() throws UserCustomException {
    throw new UserCustomException("customized exception");
}


// Test Class
@Rule
public ExpectedException expectedExcetption = ExpectedException.none();

@Test
public void testBadlyFormattedName() throws Exception {
    expectedExcetption.expect(UserCustomException.class);
    expectedExcetption.expectMessage("customized exception");
    App app = new App();
    app.occurExceptionWithMessage();
}

@Rule 애노테이션을 사용해서 ExpectedException인스턴스를 만들어 준뒤 테스트 메서드에서 expect()로 확인하는 예외클래스를 적어주고expectMessage()를 통해서 예외에 담겨진 메세지를 확인할 수 있습니다.
2011/06/25 03:32 2011/06/25 03:32