티스토리 뷰

반응형

@Configurable 어노테이션을 통해 스프링 컨텍스트에 빈을 등록한 후
확인하는 방법을 테스트 코드로 작성해보겠다.

@Configurable
public class AppConfig {

    @Bean
    public MemberService memberService(){
        return new MemberServiceImpl(getMemberRepository());
    }

    @Bean
    private MemberRepository getMemberRepository() {
        return new MemoryMemberRepository();
    }

    @Bean
    public OrderService orderService(){
        return new OrderServiceImpl(getMemberRepository(), getDiscountPolicy());
    }

    @Bean
    private DiscountPolicy getDiscountPolicy() {
        return new RateDiscountPolicy();
    }
}

@Configurable 어노테이션을 통해 @Bean객체를 등록할 설정 파일임을 정의한다
@Bean을 통해 빈에 등록할 java파일을 정의한다

 

 

자, 그럼 테스트 코드를 작성해보자,

AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);

@Test
@DisplayName("빈 이름으로 조회")
void findBeanByName() {
    MemberService memberService = ac.getBean(MemberService.class);
//        MemberService memberService = ac.getBean("memberService", MemberService.class);

    // Class명 조회
    System.out.println("memberService = " + memberService);
    System.out.println("memberService.getClass() = " + memberService.getClass());

    // 인스턴스로 비교
    Assertions.assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
}

AnnotationConfigApplicationContext을 통해
AppConfig.class에 등록된 @Bean객체들을 스프링 컨테이너에 올려놓는다.
ac.getBean을 통해 Bean객체를 얻어 올 수 이있다.
Assertions.assertThat을 통해 테스트를 적는다
isInstanceOf로 해당 인스턴스의 타입을 확인하다.

 

 

@Test
@DisplayName("빈 이름으로 조회X")
void findBeanByNameX(){
    //NoSuchBeanDefinitionException
    //MemberService xxxx = ac.getBean("XXXX", MemberService.class);

    org.junit.jupiter.api.Assertions.assertThrows(NoSuchBeanDefinitionException.class, () -> ac.getBean("XXXX", MemberService.class));

}

MemberService xxxx = ac.getBean("XXXX", MemberService.class);
없는 스프링 빈을 꺼내려고 하면 NoSuchBeanDefinitionException오류가 발생한다.
org.junit.jupiter.api.Assertions.assertThrows을 통해 Exception을 확인해본다.




Keyword

  • new AnnotationConfigApplicationContext(AppConfig.class);
  • ac.getBean("XXXX", MemberService.class);
  • NoSuchBeanDefinitionException
  • Assertions.assertThat(memberService).isInstanceOf(MemberServiceImpl.class)
  • org.junit.jupiter.api.Assertions.assertThrows
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함