작성
·
142
0
@Test
public void 회원가입() throws Exception {
//Given
Member member = new Member();
member.setName("hello");
//When
Long saveId = memberService.join(member);
//Then
Member findMember = memberRepository.findById(saveId).get();
assertEquals(member.getName(), findMember.getName());
}
위와 같은 코드를 봤을 때, findMembers 메소드를 호출할 때 예외가 발생시키는 건데 굳이 throws Exception을 할 필요가 있나요?
잘 몰라서 찾아보니까 일반적으로 테스트 메소드에서 특정 예외를 던지지 않는 경우에는 throws Exception을 생략하는 것이 보편적인 관례라고 하는데, 그러면 이 코드에서 throws Exception을 왜 쓰셨는지 궁금합니다!!
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
throws Exception
구문은 해당 메소드가 예외를 발생시킬 수 있다는 것을 나타냅니다. 테스트 코드에서 throws Exception
을 사용하는 이유는 여러 가지가 있을 수 있습니다. 첫째, 테스트 과정에서 다양한 종류의 예외가 발생할 가능성이 있으며, 이를 상위 메소드로 던져서 예외를 처리하지 않고 테스트의 실패로 기록하기 위해서입니다. 둘째, 테스트 메소드 내에서 여러 API를 사용할 때, 이 API들 중 일부가 검사된(check) 예외를 던질 수 있으므로, 모든 예외를 처리하기 보다는 간결하게 throws Exception
을 사용하여 예외 처리를 간단하게 만들 수 있습니다.
올려주신 코드에서 findById(saveId).get();
메소드 호출 시 NoSuchElementException
과 같은 예외가 발생할 수 있으며, memberService.join(member);
에서도 다른 예외가 발생할 가능성이 있습니다. 따라서 이러한 예외들을 개별적으로 처리하기보다는 일반적인 Exception
을 던지도록 하는 것입니다. 물론 실제 테스트 작성 시에는 예상 가능한 예외를 명시적으로 처리하여 테스트 코드의 명확성을 향상시킬 수도 있습니다.
throws Exception
사용 여부는 개발자의 의도와 테스트의 목적에 따라 결정됩니다. 테스트 코드를 작성할 때 명시적으로 예외 처리를 제공하는 것이 더 좋은 방법일 수도 있으며, 때로는 모든 예외를 포착하기 위해 throws Exception
을 사용하는 것이 편리할 수 있습니다.