본문 바로가기

SpringBoot

10월 23일 SpringBoot 스프링으로 bean조회4 오류검증

오류검증 = assertThrows(예외 ,()-> bean조회)

비교검증 = assertThat(비교값).isEqualsTo(비교값)

 

오류검증 instanceOf가 되지 않을경우

만약 존재하지 않는 이름으로 bean을 조회할 경우

void find BeanByNameX(){

ac.getBean("없는이름" , memberService.class);

}

 

org.junit.jupiter.api.Assertions.assertthrows(NoSuchBeanDefinitionException.class , ()-> ac.getBean("없는이름" , memberService.class));

org.junit.jupiter.api.Assertions.assertthrows: 만약 검증단계에서 문제가 발생할경우 예외비교를 한다.

NoSearchBeanprfinitionException.class  : 발생할 예외를 추정하여 명시한다. 이 예외로 후자의 예외와 비교한다,

 ()-> ac.getBean("없는이름" , memberService.class)); : 람다식을 통해 이름이 없는 Bean을 불러와 Exception을 비교하고

반약 두 예외가 같은 예외라면 true를 반환한다.

 

타입으로만 Bean을 조회할 경우 같은 타입을 가진 Bean이 여러개 이상있다면 단1개만 불러올 수 없어서 오류를 발생시킨다.

이 경우 AppConfig의 각 메서드에 이름즉 등록된 Bean의 이름으로 호출해주는게 맞는 방법이다.

 

하지만 같은 반환타입이 여러개 있을수 있고 그 여러개의 bean을 불러내는 방법은 다음과 같다.

 

void findAllBeanByType(){

Map<String , memberRepository> beans ofType = ac.getBeanOfType(MemberRepository.class);

MemberRepository.class 타입을 가진 모든 객체를 getBeanOfType을 통해 map형태로 받아올 수 있다.

 

for(String key : beanOfType.KeySet(){

System.out.print(key);

여기서 map의 값은 각기 다른 메스드 명을 key값으로 사용하여 저장된다.,

})

}

Assertions.assertThat(beanOfType.size()).isEqualsTo(2);

그후 검증을 통해 실제 등록된 bean의 수 beanOfType.size() 와 검증에 비교할 값을 isEqualsTo(2) 사용해 비교를 진행한다.

 

-bean은 타입만으로 호출은 가능하다.

-단 같은 타입의 bean이 1개일 경우는 ac.getBean 으로 조회가 가능하다. 2개이상은 오류를 발생

-2개 이상의 bean을 조회할 때는 ac.getBeanOfType 으로 조회를 한다.이때 반환값은 map타입이다.

-bean 조회시 없는 이름으로 호출할 경우 NoSuchBeanDefinitionException 예외를 발생시킨다.

-bean은 이름으로 부르거나 타입으로 부르거나 둘다를 사용해서 부르는 방법으로 불러야한다. 

-없는 조건으로 조회를 하면 예외를 발생시킨다.