해결된 질문
작성
·
164
·
수정됨
0
스프링 빈 조회할때 검증할때 isInstanceOf로 타입 비교를 할 때 느낌상으로는 MemberService 인터페이스를 넣어야될것같은데 MemberServiceImpl이 들어가는 이유가궁금합니다... 너무 당연하긴하지만 MemberService가 들어가도 검증이 되는지 궁금합니다.
그리고 하나 더 궁금한건 객체 타입이면 memberService이렇게 들어가면되는데 확장자 이름까지 들어가는지궁금합니다. ex) MemberServiceImpl -> MemberServiceImpl.class
package hello.core.beanfind;
import hello.core.AppConfig;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import
org.springframework.context.annotation.AnnotationConfigApplicationContext;
import static org.assertj.core.api.Assertions.*;
class ApplicationContextBasicFindTest {
AnnotationConfigApplicationContext ac = new
AnnotationConfigApplicationContext(AppConfig.class);
@Test
@DisplayName("빈 이름으로 조회")
void findBeanByName() {
MemberService memberService = ac.getBean("memberService",
MemberService.class);
assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
}
@Test
@DisplayName("이름 없이 타입만으로 조회")
void findBeanByType() {
MemberService memberService = ac.getBean(MemberService.class);
assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
}
@Test
@DisplayName("구체 타입으로 조회")
void findBeanByName2() {
MemberServiceImpl memberService = ac.getBean("memberService",
MemberServiceImpl.class);
assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
}
@Test
@DisplayName("빈 이름으로 조회X")
void findBeanByNameX() {
//ac.getBean("xxxxx", MemberService.class);
Assertions.assertThrows(NoSuchBeanDefinitionException.class, () ->
ac.getBean("xxxxx", MemberService.class));
}
}
답변 1
0
안녕하세요. 이찬진님
이 테스트의 목적은 MemberService를 구현한 여러가지 구현체 중의 하나가 아니라 아주 명확하게 MemberServiceImpl가 구현을 했는지 확인하기 위함입니다.
추가로 자바에서 .class가 붙게되면 특정 클래스의 타입 정보를 확인할 수 있습니다. 클래스 정보를 instance of에서는 .class를 생략할 수 있지만 이 테스트 메서드에서는 .class를 붙여서 클래스의 타입 정보를 명확하게 전달해주어야 합니다. 인스턴스나 객체가 아니라 클래스의 정보를 전달하려면 .class를 붙여야 된다고 이해하시면 됩니다.
감사합니다.
좋은 답변 감사드립니다. 덕분에 궁금증 해결하고 갑니다!