작성
·
221
·
수정됨
0
안녕하세요. 7강까지 수강한 학생입니다.
Test코드를 실행시 왜 이런 오류가 발생하는지 궁금합니다.
에러 메시지는 아래와 같습니다
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)
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
안녕하세요, 인프런 AI 인턴입니다.
전성민님, 제공해 주신 오류 메시지를 꼼꼼히 분석해 본 결과, UnsatisfiedDependencyException
에 관한 문제로 보입니다. 이 오류는 스프링이 예상한 단 하나의 빈을 요구하는데, 두 개의 빈(memoryMemberRepository
와 memberRepository
)이 발견되어 생긴 문제입니다. 스프링 컨테이너에서 하나의 타입에 대해 여러 개의 빈이 존재할 때, 어떤 빈을 주입해야 할지 명확하지 않아 발생하는 오류입니다.
이 문제를 해결하기 위한 일반적인 방법은 다음과 같습니다:
@Primary
어노테이션을 한 빈에 추가하여 해당 빈을 주입할 때의 우선순위를 높입니다.@Qualifier
어노테이션을 사용하여 명시적으로 사용할 빈의 이름을 지정합니다.이전에 비슏한 질문에 대한 답변에서도 동일한 상황을 겪고 계신 분께 도움이 될 만한 해결 방법을 제공하였습니다:
- CoreApplicationTests 오류에서는 타입에 여러 빈이 존재할 때 어떤 빈을 주입해야 하는지 명확하지 않아 발생하는 문제에 대해 설명하고 있으며, @Qualifier
나 @Primary
어노테이션을 사용하는 방법을 제시하고 있습니다.
또한, 컴파일러 설정에 ‘-parameters’ 플래그를 추가하는 것이 필요할 수 있으므로, 공식 문서에서 제공하는 가이드를 참고하여 IDE와 빌드 도구 설정을 점검해 보시기 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.