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

전성민님의 프로필 이미지

작성한 질문수

스프링 핵심 원리 - 기본편

에러가 발생하는 이유가 궁금합니다.

작성

·

221

·

수정됨

0

안녕하세요. 7강까지 수강한 학생입니다.

 

Test코드를 실행시 왜 이런 오류가 발생하는지 궁금합니다.

 

 

에러 메시지는 아래와 같습니다

  1. Coreapplication:

15:37:49.791 [main] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils -- Could not detect default configuration classes for test class [hello.core.CoreApplicationTests]: CoreApplicationTests does not declare any static, non-private, non-final, nested classes annotated with @Configuration.

15:37:49.833 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper -- Found @SpringBootConfiguration hello.core.CoreApplication for test class hello.core.CoreApplicationTests

. ____ _

/\\ / ___'_ __ (_)_ _ \ \ \ \

( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \

\\/ ___)| |_)| | | | | || (_| | ) ) ) )

' |____| .__|_| |_|_| |_\__, | / / / /

=========|_|==============|___/=/_/_/_/

:: Spring Boot :: (v3.3.1)

2024-07-16T15:37:50.184+09:00 INFO 21812 --- [core] [ main] hello.core.CoreApplicationTests : Starting CoreApplicationTests using Java 17.0.11 with PID 21812 (started by seongmin in C:\core\core)

2024-07-16T15:37:50.185+09:00 INFO 21812 --- [core] [ main] hello.core.CoreApplicationTests : No active profile set, falling back to 1 default profile: "default"

2024-07-16T15:37:50.557+09:00 WARN 21812 --- [core] [ main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberServiceImpl' defined in file [C:\core\core\out\production\classes\hello\core\member\MemberServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'hello.core.member.MemberRepositoy' available: expected single matching bean but found 2: memoryMemberRespositoy,memberRepository

2024-07-16T15:37:50.563+09:00 INFO 21812 --- [core] [ main] .s.b.a.l.ConditionEvaluationReportLogger :

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.

2024-07-16T15:37:50.594+09:00 ERROR 21812 --- [core] [ main] o.s.b.d.LoggingFailureAnalysisReporter :

***************************

APPLICATION FAILED TO START

***************************

Description:

Parameter 0 of constructor in hello.core.member.MemberServiceImpl required a single bean, but 2 were found:

- memoryMemberRespositoy: defined in file [C:\core\core\out\production\classes\hello\core\member\MemoryMemberRespositoy.class]

- memberRepository: defined by method 'memberRepository' in class path resource [hello/core/AppConfig.class]

This may be due to missing parameter name information

Action:

Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed

Ensure that your compiler is configured to use the '-parameters' flag.

You may need to update both your build tool settings as well as your IDE.

(See https://github.com/spring-projects/spring-framework/wiki/Upgrading-to-Spring-Framework-6.x#parameter-name-retention)

 

 

 

 

 

 

 

 

 

 

  1. contextLoad:

 

java.lang.IllegalStateException: Failed to load ApplicationContext for [MergedContextConfiguration@6fd12c5 testClass = hello.core.CoreApplicationTests, locations = [], classes = [hello.core.CoreApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@64f857e7, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@3d6300e8, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@7927bd9f, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@3d3f761a, org.springframework.boot.test.context.SpringBootTestAnnotation@c6ebefee], contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]

at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:180)

at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130)

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

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)

 

답변 2

0

안녕하세요. 전성민님, 공식 서포터즈 OMG입니다.

테스트 실행을 IntelliJ IDEA가 아닌 Gradle(Default)로 변경해서 확인해보시겠어요?

감사합니다.

0

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

전성민님, 제공해 주신 오류 메시지를 꼼꼼히 분석해 본 결과, UnsatisfiedDependencyException에 관한 문제로 보입니다. 이 오류는 스프링이 예상한 단 하나의 빈을 요구하는데, 두 개의 빈(memoryMemberRepositorymemberRepository)이 발견되어 생긴 문제입니다. 스프링 컨테이너에서 하나의 타입에 대해 여러 개의 빈이 존재할 때, 어떤 빈을 주입해야 할지 명확하지 않아 발생하는 오류입니다.

이 문제를 해결하기 위한 일반적인 방법은 다음과 같습니다:

  1. @Primary 어노테이션을 한 빈에 추가하여 해당 빈을 주입할 때의 우선순위를 높입니다.
  2. @Qualifier 어노테이션을 사용하여 명시적으로 사용할 빈의 이름을 지정합니다.
  3. 컴파일러에 ‘-parameters’ 플래그를 추가하여 메서드의 파라미터 이름을 컴파일된 바이트코드에 포함시키는 설정을 확인합니다.

이전에 비슏한 질문에 대한 답변에서도 동일한 상황을 겪고 계신 분께 도움이 될 만한 해결 방법을 제공하였습니다:
- CoreApplicationTests 오류에서는 타입에 여러 빈이 존재할 때 어떤 빈을 주입해야 하는지 명확하지 않아 발생하는 문제에 대해 설명하고 있으며, @Qualifier@Primary 어노테이션을 사용하는 방법을 제시하고 있습니다.

또한, 컴파일러 설정에 ‘-parameters’ 플래그를 추가하는 것이 필요할 수 있으므로, 공식 문서에서 제공하는 가이드를 참고하여 IDE와 빌드 도구 설정을 점검해 보시기 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.