인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

이서우님의 프로필 이미지
이서우

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

스프링 통합 테스트

변경된 테스트에서 MemberRepository를 주입받는 코드의 용도

작성

·

248

3

안녕하세요!

강의에서 기존 테스트를 통합 테스트로 변경하면서 생성자 주입 코드가 필드 주입 코드로 변경되었는데요

@Autowired MemberService memberService;
@Autowired MemberRepository memberRepository;

필드 주입으로 변경한 후 MemberRepository를 Autowired 받는 부분은 주석 처리를 해도 테스트 코드가 정상적으로 수행되더라고요

    @Autowired MemberService memberService;
// @Autowired MemberRepository memberRepository;

생각을 해보니 MemberService를 Autowired할 수 있다는 건 MemberService 빈이 이미 생성되어 있다는 거고

MemberService 빈이 생성되려면 MemberService 생성자의 매개변수로 받을 MemberRepository가 필요하기 때문에 MemberRepository 빈도 이미 생성되어 있다는 거고

결국 MemberRepository 빈을 전달하면서 MemberService 빈을 생성했기 때문에 이후부터는 필드 주입이든 생성자 주입이든 MemberService를 Autowired하기 위해 MemberRepository가 함께 쓰이지 않아도 될 것 같더라고요

혹시 아니라면 MemberRepository를 주입받는 코드의 용도가 따로 있는 건가요?

답변 4

1

이서우님의 프로필 이미지
이서우
질문자

아직 뭐가 맞는 건지 확신이 들지 않는 단계라 헷갈렸는데 답변 감사합니다!

1

안녕하세요. 이서우님, 공식 서포터즈 OMG입니다.

생각을 해보니 MemberService를 Autowired할 수 있다는 건 MemberService 빈이 이미 생성되어 있다는 거고

MemberService 빈이 생성되려면 MemberService 생성자의 매개변수로 받을 MemberRepository가 필요하기 때문에 MemberRepository 빈도 이미 생성되어 있다는 거고

결국 MemberRepository 빈을 전달하면서 MemberService 빈을 생성했기 때문에 이후부터는 필드 주입이든 생성자 주입이든 MemberService를 Autowired하기 위해 MemberRepository가 함께 쓰이지 않아도 될 것 같더라고요

답변을 드리기에 앞서 설명하신 위에 내용을 다른 사람으로부터의 학습 없이 혼자서 개념을 접근하신거면 정말 대단하신거 같아요.

저 같은 경우는 말씀하신 내용을 인프런의 지식공유자 이신 백기선님의 '스프링 핵심 기술이'란 강의를 통해서 처음 알게 된 내용인데, 혼자서 그러한 개념을 접근해서 생각하신거면 정말 비상하신거 같군요....

답변을 드리자면, 말씀하신 내용이 맞고 마지막의

혹시 아니라면 MemberRepository를 주입받는 코드의 용도가 따로 있는 건가요?

이 부분은 해당 테스트에서 MemberRepository를 사용하지는 않지만 기존의 코드를 재사용 하는 과정에서 삭제하지 않고 남겨 두신 걸로 보입니다. 작성된 MemberServiceIntegrationTest에서 없어도 되는 객체인건 맞습니다.

감사합니다.

0

저도 memberRepository가 시커멓고 Test코드에 있지도 않은데 왜 돌아가는거지 싶었는데 그 전에 복사한 Test코드의 @BeforeEach와 @AfterEach인가 그 부분에 사용된 객체였습니다..

0

저는 그냥 넘어갔었는데 대단하시네요 저도 배워갑니다

이서우님의 프로필 이미지
이서우

작성한 질문수

질문하기