@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()를 통해서 예외에 담겨진 메세지를 확인할 수 있습니다.
Comments