이번 시간에는 스프링 빈 조회 방법중에서 기본적인 방법에 대해서 알아보았다.
빈을 조회하는 가장 간단한 방법은 getBean 메소드를 사용해서 파라미터로 (빈 이름, 타입)
혹은 (타입) 이렇게 두가지 방법으로 쓰면 된다.
그리고 스프링 빈이 없다면 예외가 발생한다.
테스트를 진행하기 위해 클래스를 생성해준다.
먼저 getBean 테스트를 하기 위해서 테스트 코드를 작성해주고, println으로 콘솔에 찍어본다.
테스트가 정상 작동하는 것을 확인할 수 있다!
코드를 수정하는데, memberService가 MemberServiceImpl의 인스턴스가 맞으면 테스트 통과, 아니면 실패하는 로직으로 코딩을 한다.
테스트가 통과하면서 memberService가 MemberServiceImpl의 인스턴스가 맞는 것을 확인할 수 있다~~
그리고 alt + enter를 눌러서 정적 임포트를 실행해준다.
정적 임포트를 실행하면 위와 같이 호출이 가능해진다~~
getBean 메소드에서 빈 이름없이 타입으로만 조회하는 테스트를 하기 위해,
이전 코드를 복붙하고 이름없이 타입만 파라미터로 받아준다.
테스트는 역시 정상적으로 통과한다ㅋㅋㅋ
이번에는 구체 타입으로 조회하기 위해서, 타입을 MemberServiceImpl로 조회를 해준다.
그리고 테스트도 통과!
getBean에서 타입으로 조회를 할 때는, 스프링 빈에 등록된 인스턴스 타입을 보고 결정하기 때문에,
인터페이스가 아닌 구현체로 조회도 가능하다.
물론 구현체가 아닌 역할에 의존해야 하기 때문에, 인터페이스로 조회를 하는 것을 추천한다ㅋㅋㅋ
실패 테스트 케이스도 만들어봐야 하기 때문에, 그냥 무작위 이름 xxxxx로 조회를 해본다.
테스트 결과, NoSuchBeanDefinitionException: No bean named 'xxxxx' available
오류가 뜨면서, 빈 이름을 조회가 안되는 것을 확인할 수 있다.
추가 테스트를 위해서, 예외가 터져야지만 테스트가 성공하는 로직을 짜준다.
위의 코드를 설명하자면, 43번째 줄의 로직을 실행하고,
44번째 줄에서는, 43번째 줄의 로직이 예외가 터져야지 (예외가 던져져야지) 테스트가 성공이고,
예외가 터지지 않으면 실패하는 로직이다.
예외가 정상적으로 발생하면서 테스트가 성공했다~~!
댓글