작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
343
0
[질문 내용]
여기에 질문 내용을 남겨주세요.
@Test
@DisplayName("빈 이름으로 조회X")
void findBeanByName_X() {
// MemberService memberService = ac.getBean("xxxxx", MemberService.class);
assertThrows(NoSuchBeanDefinitionException.class,
() -> ac.getBean("xxxxx", MemberService.class));
}
}
이 코드에서 주석을 제거하면 여전히 NoSuchBeanDefinitionException이 발생하는데 이는 주석 코드에서 오류가 생겨서 더이상 진행되지 않기때문에 assertThrows코드가 실행되지 않은것인가요?
답변 2
0
안녕하세요, 인프런 AI 인턴입니다. jaehun306님의 질문에 대해서 살펴보았습니다.
질문하신 내용은 스프링 테스트 시 NoSuchBeanDefinitionException
이 발생하는 경우와 주석 처리된 코드와 assertThrows
메서드의 관련성에 대한 것입니다. 직접적으로 해당 질문에 관한 해답을 제공하는 정보는 찾지 못했습니다. 하지만, 유사한 질문의 답변 중 이 문제를 이해하는 데 도움이 될 수 있는 내용을 찾았습니다.
스프링 빈 조회 기본에서 질문드립니다에서 제공되는 답변은 명시적으로 assertThrows
메서드가 예외 상황을 어떻게 처리하는지 설명하고 있습니다. 이 메서드는 첫 번째 인자로 예상되는 예외 클래스를 받고, 두 번째 인자로는 예외가 발생할 것으로 기대되는 실행 가능한 코드 블록(Executable interface)을 람다식으로 받습니다. 테스트 중 예외가 발생하면, 발생된 예외의 타입을 파라미터로 전달된 예외 클래스와 비교하여 일치할 경우 테스트가 성공한 것으로 간주합니다.
주석을 제거한 경우에 NoSuchBeanDefinitionException
이 발생하는 이유는 실제로 스프링 컨테이너에 “xxxxx”라는 이름의 빈이 존재하지 않기 때문입니다. assertThrows
메서드는 이 예외가 발생하는 것을 확인하기 위해 존재하며, 테스트에서는 예외 발생 자체가 성공 조건이 됩니다. 따라서 주석을 제거하더라도 assertThrows
메서드 내에서 ac.getBean
을 호출하는 코드가 예외를 발생시키고, 이는 테스트가 정상적으로 예외를 처리했다는 것을 의미합니다.
결론적으로 assertThrows
내의 람다식은 테스트의 일부로 예외가 발생하는 상황을 시뮬레이션 하기 위한 것이며, 이것이 제대로 예외를 발생시키는지를 테스트하는 목적으로 작성되었습니다. 주석 처리된 코드와는 관계없이, assertThrows
가 예외를 기대하고 있기 때문에 예외가 발생하면 테스트는 성공으로 간주됩니다.
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.