스프링/1. 스프링 핵심 원리

21강. 빈 조회

sdafdq 2023. 7. 17. 22:18
public class ApplicationContextBasicFindTest {

    AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);

    @Test
    @DisplayName("빈 이름으로 조회")
    public void findBeanByName(){
        MemberService memberService = ac.getBean("memberService", MemberService.class);
        //Assertions.assertThat(memberService.getClass()).isEqualTo(MemberServiceImpl.class);
        Assertions.assertThat(memberService).isInstanceOf(MemberService.class);
    }
    
 }

주석처리한건 내가 한건데, 저렇게 해도 됨. 근데 문제는 isEqual이라 제대로 구현체로 비교해야 함.

 

 

 

    @Test
    @DisplayName("빈 타입으로 조회")
    public void findBeanByType(){
        MemberService memberService = ac.getBean( MemberService.class);
        //Assertions.assertThat(memberService.getClass()).isEqualTo(MemberServiceImpl.class);
        Assertions.assertThat(memberService).isInstanceOf(MemberService.class);
    }

타입

 

 

 

   @Test
    @DisplayName("빈 이름으로 조회X")
    public void findBeanByNameFail(){
        MemberService memberService = ac.getBean("xxxxx", MemberService.class);
        //Assertions.assertThat(memberService.getClass()).isEqualTo(MemberServiceImpl.class);
    }

실패 테스트를 무조건 해 봐야 함.

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'xxxxx' available

 

 

@Test
    @DisplayName("빈 이름으로 조회X")
    public void findBeanByNameFail(){
        assertThrows(NoSuchBeanDefinitionException.class, () -> ac.getBean("xxxxx", MemberService.class));
    }

assertThrows 이것도 Assertions 껀데 core 꺼가 아니고 junit 같은 이름임. 걍 둘다 Assertions 필요할 때 쓰고 static으로 만들어 두는게 편함.

 

assertThrows(NoSuchBeanDefinitionException.class, () -> ac.getBean("xxxxx", MemberService.class));

이거는 저 오른쪽 함수 던질 시 왼쪽에 있는 예외를 Throws 해야 제대로 넘어감.