@Test
@DisplayName("빈 이름으로 조회X")
void findBeanByNameX(){
//MemberService xxxx = ac.getBean("xxxx", MemberService.class);
org.junit.jupiter.api.Assertions.assertThrows(NoSuchBeanDefinitionException.class,
()-> ac.getBean("xxxx", MemberService.class)); // 오른쪽 로직을 실행하면 , 왼쪽의 예외가 터져야 성공
}
테스트 실행
설정 정보에 같은 타입의 빈 만들고 조회하기
//스프링 빈 조회 - 동일한 타입이 둘 이상
//ac.getBeansOfType()을 사용하면 해당 타입의 모든 빈을 조회할 수 있다.
@Test
@DisplayName("타입으로 조회시 같은 타입이 둘 이상 있으면, 중복 오류가 발생한다")
void findBeanByTypeDuplicate(){
ac.getBean(MemberRepository.class);
}
해당 오류 발생
해결
@Test
@DisplayName("타입으로 조회시 같은 타입이 둘 이상 있으면, 중복 오류가 발생한다")
void findBeanByTypeDuplicate(){
assertThrows(NoUniqueBeanDefinitionException.class, ()->ac.getBean(MemberRepository.class));
}
@Test
@DisplayName("타입으로 조회시 같은 이름이 둘 이상 있으면, 빈 이름을 지정하면 된다.")
void findBeanByName() {
MemberRepository memberRepository = ac.getBean("memberRepository1",MemberRepository.class); // 빈이름 지정
assertThat(memberRepository).isInstanceOf(MemberRepository.class);
}
@Test
@DisplayName("특정 타입을 모두 조회하기")
void findAllBeanByType(){
Map<String, MemberRepository> beansOfType = ac.getBeansOfType(MemberRepository.class);
for (String key : beansOfType.keySet()) {
System.out.println("key = " + key + " value " + beansOfType.get(key));
}
System.out.println("beansOfType" + beansOfType);
assertThat(beansOfType.size()).isEqualTo(2);
}