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

작성자 없음

작성자 정보가 삭제된 글입니다.

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

스프링 통합 테스트

의존성오류??

작성

·

307

0

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

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

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

[질문 내용]
여기에 질문 내용을 남겨주세요.

 

DB를 MySql로 연동했습니다. 서버 실행 시킨후 localhost 접속해서 정상적으로 DB에 삽입되는것 까지 확인했습니다.

하지만 통합테스트 올려주신 그대로 복붙해 실행해 봤더니 아래와 같은 오류 발생합니다.

 

 

 

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'hello.hellospring.service.MemberServiceIntegrationTest': Unsatisfied dependency expressed through field 'memberRepository': No qualifying bean of type 'hello.hellospring.repository.MemberRepository' available: expected single matching bean but found 3: jdbcMemberRepository,memoryMemberRepository,MemberRepository

at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:787)

at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:767)

at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:145)

at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:508)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1419)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:398)

at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:143)

at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:98)

at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)

at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163)

at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)

at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)

at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)

at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)

at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)

at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310)

at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735)

at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734)

at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)

at java.base/java.util.Optional.orElseGet(Optional.java:364)

at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)

at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)

Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.hellospring.repository.MemberRepository' available: expected single matching bean but found 3: jdbcMemberRepository,memoryMemberRepository,MemberRepository

at org.springframework.beans.factory.config.DependencyDescriptor.resolveNotUnique(DependencyDescriptor.java:218)

at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1420)

at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353)

at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:784)

... 21 more

 

 

 

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

윤형주님, 스프링 프레임워크를 사용하면서 발생한 UnsatisfiedDependencyException 오류는 스프링 컨테이너가 MemberRepository 타입의 빈을 자동 주입하려 할 때, 기대한 단일 빈 대신에 여러 개의 빈을 찾아서 발생하는 문제입니다. 이 경우 자동 주입에 실패하면서 예외가 발생합니다.

오류 메시지에서 언급된 NoUniqueBeanDefinitionExceptionhello.hellospring.repository.MemberRepository 타입에 대해 기대했던 하나의 빈을 찾아야 하는데, 실제로는 jdbcMemberRepository, memoryMemberRepository, MemberRepository 총 3개의 빈을 찾았다고 합니다.

이러한 문제를 해결하는 한 가지 방법은 특정 빈을 자동 주입할 때 @Qualifier 어노테이션을 사용하여 명시적으로 사용할 빈의 이름을 지정하는 것입니다. 다른 방법으로는 @Primary 어노테이션을 사용하여 자동 주입 시 기본적으로 사용할 빈을 지정할 수 있습니다.

유사한 문제를 다루는 질문과 답변 링크를 참고하시어 문제를 해결하시길 바랍니다.

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기