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

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

박정선님의 프로필 이미지
박정선

작성한 질문수

스프링 DB 2편 - 데이터 접근 활용 기술

프로젝트 구조 설명3 - 테스트

Test code 관련하여 궁금한 것이 있습니다.

해결된 질문

작성

·

247

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
안녕하세요. 강의 열심히 듣고 있습니다.

밑에 다른 분이 비슷한 질문을 해주셨는데, 해소되지 않는 부분이 있어 질문을 남깁니다.

Test 코드 작성시에 위에 @SpringBootTest annotation이 있는데, 해당 annotation이 붙으면 컨테이너가 자동으로 실행되어 spring boot 환경에서 test를 진행이 가능한 것으로 알고 있습니다. 결국 주입을 자동으로 받는 다는 것은 memberRepository가 빈으로 등록되어있다는 뜻인 것 같은데, memberRepository는 test가 아닌 실제 main쪽 패키지에 존재하는데 어떻게 등록이 가능한건가요? main쪽에 있는 ItemServiceApplication이 실행되는 것인가요?

이전에도 비슷하게 실행한 적이 있는 것 같은데.. 그때는 인지하지 못하다가 문득 궁금해져서 질문을 남깁니다.

감사합니다.

답변 1

2

안녕하세요. 박정선님, 공식 서포터즈 David입니다.

@SpringBootTest 애노테이션이 붙은 클래스의 메서드를 실행하면 내부적으로 @SpringBootConfiguration 애노테이션이 붙은 클래스들을 찾고 이를 빈으로 등록하게 됩니다.

이 과정에서 test 패키지가 아닌 main 이하에 있는 패키지도 탐색 대상이 됩니다.

main 패키지 내 main 메서드가 존재하는 클래스에 @SpringBootApplication 애노테이션이 붙어 있는데 해당 애노테이션은 @SpringBootConfiguration 애노테이션과 @ComponentScan 애노테이션을 가지고 있습니다.

따라서, 해당 클래스는 빈으로 등록되게 되며 @ComponentScan이 붙어 있었기 때문에 main 패키지 내 컴포넌트 스캔 대상의 모든 빈들이 스캔되어 빈으로 등록되게 됩니다.

요약하면, @SpringBootTest을 붙이면 main, test 패키지 내 특정 클래스들을 식별하여 빈 등록이 처리됩니다.

감사합니다.

박정선님의 프로필 이미지
박정선
질문자

감사합니다. 큰 도움이 됐습니다.

박정선님의 프로필 이미지
박정선

작성한 질문수

질문하기