(기술) 예외 종류

이번 교육기간 동안 프로젝트를 진행하면서 여러가지 종류의 예외를 만나게 되었습니다. 그래서 이번 기회에 예외의 종류와 차이점 등에 대해서 정리해보려고 합니다. 또, 테스트케이스 작성 시에 예외처리와 관련하여 습득한 지식도 정리해보려고 합니다.

예외 종류

우선 제가 그동안 접할 수 있었던 예외의 종류를 간단하게 적어보자면

등이 있었습니다. 그런데 어떤 예외는 구현시에 try-catch를 사용해서 예외 처리를 하는데 어떤 예외는 try-catch를 사용할 필요가 없는 차이가 있었습니다. 처음에는 이것을 중요하게 여기지 않았었는데 이번에 클린코드 책 등을 통해서 체크 예외와 언체크 예외와의 차이점이라는 것을 알게 되었습니다.

체크 예외가 발생할 수 있는 경우 try-catch나 throws를 이용하여 처리해 주지 않는 다면 컴파일에러가 발생합니다. 언체크 예외는 개발자가 부주의해서 발생할 수 있는 경우이기 때문에 예외가 발생하지 않도록 수정해야 합니다.

이번 프로젝트 진행 중 DuplicateKeyException과 관련하여 생겼던 이슈 덕분에 이러한 개념들에 대해서 빠른 이해가 가능했었습니다. 처음에는 DuplicateKeyException 예외가 발생해서 해당 예외를 처리하는 코드를 try-catch를 이용하여 구현하였습니다. 하지만 이러한 개념을 알고 난 뒤에는 DuplicateKeyException 예외가 언체크 예외이기 때문에 발생할 경우가 생기지 않도록 수정하였습니다.


Mock 객체의 메소드에서 예외를 던지게 하는 방법

이번 프로젝트에서 테스트케이스를 작성하면서 가장 기본적으로 사용하였던 함수는

when(Mock객체.함수(파라미터형식)).thenReturn(리턴값);

이었습니다.

그 후 Mock객체에서 예외가 발생하는 경우에 대한 테스트도 필요했기 때문에 알아보니 thenReturn() 대신에 thenThrow() 함수를 사용할 수 있다는 것을 알게 되었습니다.

when(Mock객체.함수(파라미터형식)).thenThrow(예외);

그러나 이 경우 해당 Mock객체의 함수의 리턴 형식이 void인 경우에는 원하는 동작을 하지않는 것을 알게 되었고 이 경우 새로운 방식으로 처리하였습니다.

doThrow(예외).when(Mock객체).함수(파라미터형식);

위의 두 경우에 대한 자세한 차이는 좀 더 공부해 보도록 하겠습니다.