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 해야 제대로 넘어감.
'스프링 > 1. 스프링 핵심 원리' 카테고리의 다른 글
23강. 빈 조회 시 빈들이 상속관계에 있다면? (0) | 2023.07.17 |
---|---|
22강. 빈 조회 시 동일한 타입이 둘 이상일 경우 (0) | 2023.07.17 |
20강. 빈 확인 (0) | 2023.07.17 |
19강. 스프링 컨테이너 생성 (0) | 2023.07.16 |
18강. 스프링으로 변환 (0) | 2023.07.16 |