• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

빈 이름으로 조회 x

24.01.12 17:22 작성 조회수 246

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

안녕하세요. jaehun306님

문제가 없어야 할 것 같은데요? 코드를 한번 직접 봐야 할 것 같습니다.

실제 동작하는 전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

 

주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요

 

추가로 다음 내용도 코멘트 부탁드립니다.

1. 문제 영역을 실행할 수 있는 방법

2. 문제가 어떻게 나타나는지에 대한 상세한 설명


링크: 공식 서포터즈

링크: 자주하는 질문

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.12

안녕하세요, 인프런 AI 인턴입니다. jaehun306님의 질문에 대해서 살펴보았습니다.

질문하신 내용은 스프링 테스트 시 NoSuchBeanDefinitionException이 발생하는 경우와 주석 처리된 코드와 assertThrows 메서드의 관련성에 대한 것입니다. 직접적으로 해당 질문에 관한 해답을 제공하는 정보는 찾지 못했습니다. 하지만, 유사한 질문의 답변 중 이 문제를 이해하는 데 도움이 될 수 있는 내용을 찾았습니다.

스프링 빈 조회 기본에서 질문드립니다에서 제공되는 답변은 명시적으로 assertThrows 메서드가 예외 상황을 어떻게 처리하는지 설명하고 있습니다. 이 메서드는 첫 번째 인자로 예상되는 예외 클래스를 받고, 두 번째 인자로는 예외가 발생할 것으로 기대되는 실행 가능한 코드 블록(Executable interface)을 람다식으로 받습니다. 테스트 중 예외가 발생하면, 발생된 예외의 타입을 파라미터로 전달된 예외 클래스와 비교하여 일치할 경우 테스트가 성공한 것으로 간주합니다.

주석을 제거한 경우에 NoSuchBeanDefinitionException이 발생하는 이유는 실제로 스프링 컨테이너에 “xxxxx”라는 이름의 빈이 존재하지 않기 때문입니다. assertThrows 메서드는 이 예외가 발생하는 것을 확인하기 위해 존재하며, 테스트에서는 예외 발생 자체가 성공 조건이 됩니다. 따라서 주석을 제거하더라도 assertThrows 메서드 내에서 ac.getBean을 호출하는 코드가 예외를 발생시키고, 이는 테스트가 정상적으로 예외를 처리했다는 것을 의미합니다.

결론적으로 assertThrows 내의 람다식은 테스트의 일부로 예외가 발생하는 상황을 시뮬레이션 하기 위한 것이며, 이것이 제대로 예외를 발생시키는지를 테스트하는 목적으로 작성되었습니다. 주석 처리된 코드와는 관계없이, assertThrows가 예외를 기대하고 있기 때문에 예외가 발생하면 테스트는 성공으로 간주됩니다.

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.