inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

해결된 질문

287

박정선

작성한 질문수 13

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이 실행되는 것인가요?

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

감사합니다.

spring

답변 1

2

David

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

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

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

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

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

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

감사합니다.

0

박정선

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

RepositoryTest의 패키지 위치가 domain인 이유

0

17

1

REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!

0

27

1

update()에 사용하는 setter 질문드립니다.

0

45

1

SQL 중심적 개발의 문제점에 대한 질문

0

71

1

혹시 Containing 을 안쓰신 이유가 있을까요?

0

82

2

[공유] 스프링부트 4.x 버전 mybatis 연동

0

170

1

@repository 어노테이션

0

88

3

ItemService

0

56

1

논리 커밋, 물리 커밋 질문드립니다.

0

53

1

내부 트랜잭션 커밋은 필수인가요?

0

55

1

프록시 커넥션 객체를 반환할 때 생성하는건가요?

0

53

1

Transaction readOnly 성능 개선 (김영한님의 대한 감사인사)

2

176

2

JPQL 대신 네이티브 쿼리를 사용해야 하는 경우

0

76

1

@EventListener(ApplicationReadyEvent.class) 관련

0

87

1

트랜잭션 동기화 매니저와 데이터 소스

0

75

1

DB 관련 강의 개설 계획은 없으신건가요?

0

132

2

물리 트랜잭션 과 논리트랜잭션 용어를 맞게 이해한걸까요

0

93

1

스프링 3 버전 이상 rollbackFor 변경된듯요

1

110

1

트랜잭션 전파 질문.

0

86

1

프로젝트 오픈 에러

0

124

1

외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다

0

82

2

같은 스레드를 사용하면 트랜잭션 동기화 매니저는 같은 커넥션을 반환

0

71

1

h2 인메모리 테스트중 예약어 충돌날 경우 대처방법

0

99

1

커스텀aop와 트랜잭션을 같이 사용할때 우선순위에 관한 질문

0

96

2