MemberServiceIntegrationTest에서 오류가 납니다. java.lang.IllegalStateException: Failed to load ApplicationContext
미해결
일단 jpa로 진행하던중 오류가 났습니다.. Member.java Member.javapackage hwang.hwangspring.domain; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity //->JPA가 관리하는 ENTITY라는 의미가 됨 public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; //시스템이 정해줌 private String name; //고객이 회원가입할 때 적는 이름 public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } JpaMemberRepository.java import javax.persistence.EntityManager; import java.util.List; import java.util.Optional; public class JpaMemberRepository implements MemberRepository{ private final EntityManager em; public JpaMemberRepository(EntityManager em) { this.em = em; } @Override public Member save(Member member) { em.persist(member); return member; } @Override public Optional<Member> findById(Long id) { Member member = em.find(Member.class,id); return Optional.ofNullable(member); } @Override public Optional<Member> findByName(String name) { List<Member> result= em.createQuery("select m from Member m where m.name =:name",Member.class) .setParameter("name",name) .getResultList(); return result.stream().findAny(); } @Override public List<Member> findAll() { List<Member> result = em.createQuery("select m from Member m", Member.class).getResultList(); return result; //객체 자체를 return, } } Springconfig.java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.persistence.Entity; import javax.persistence.EntityManager; import javax.sql.DataSource; @Configuration public class SpringConfig { private final EntityManager em; private final DataSource dataSource; @Autowired public SpringConfig(DataSource dataSource,EntityManager em){ this.dataSource=dataSource; this.em=em; } @Bean public MemberService memberService() { // 이 로직을 등록해서 스프링 빈에 등록을 해줌 return new MemberService((MemoryMemberRepository) memberRepository()); //MemberService()가 스트링빈에 등록됨 } @Bean public MemberRepository memberRepository(){ return new JpaMemberRepository(em); } } MemberIntegrataionTest를 실행할경우 package hwang.hwangspring.service; import hwang.hwangspring.domain.Member; import hwang.hwangspring.repository.MemberRepository; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @SpringBootTest @Transactional class MemberServiceIntegrationTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test public void 회원가입() throws Exception { //Given Member member = new Member(); member.setName("hello"); //When Long saveId = memberService.join(member); //Then Member findMember = memberRepository.findById(saveId).get(); assertEquals(member.getName(), findMember.getName()); } @Test public void 중복_회원_예외() throws Exception { //Given Member member1 = new Member(); member1.setName("spring"); Member member2 = new Member(); member2.setName("spring"); //When memberService.join(member1); IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));//예외가 발생해야 한다. assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); } } 아래와 같은 오류가 뜹니다 ㅠㅠ java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext( DefaultCacheAwareContextLoaderDelegate.java:98 ) at org.springframework.test.context.support .DefaultTestContext.getApplicationContext( DefaultTestContext.java:124 ) at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary( ServletTestExecutionListener.java:190 ) at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance( ServletTestExecutionListener.java:132 ) at org.springframework.test.context.TestContextManager.prepareTestInstance( TestContextManager.java:248 ) at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance( SpringExtension.java:138 ) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$8( ClassBasedTestDescriptor.java:363 ) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable( ClassBasedTestDescriptor.java:368 ) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$9( ClassBasedTestDescriptor.java:363 ) at java.base/java.util.stream.ReferencePipeline$3$1.accept( ReferencePipeline.java:195 ) at java.base/java.util.stream.ReferencePipeline$2$1.accept( ReferencePipeline.java:177 ) at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining( ArrayList.java:1655 ) at java.base/java.util.stream.AbstractPipeline.copyInto( AbstractPipeline.java:484 ) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto( AbstractPipeline.java:474 ) at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining( StreamSpliterators.java:312 ) 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:658 ) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors( ClassBasedTestDescriptor.java:362 ) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6( ClassBasedTestDescriptor.java:283 ) at org.junit.platform.engine.support .hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance( ClassBasedTestDescriptor.java:282 ) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4( ClassBasedTestDescriptor.java:272 ) at java.base/java.util.Optional.orElseGet( Optional.java:369 ) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5( ClassBasedTestDescriptor.java:271 ) at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances( TestInstancesProvider.java:31 ) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0( TestMethodTestDescriptor.java:102 ) at org.junit.platform.engine.support .hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare( TestMethodTestDescriptor.java:101 ) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare( TestMethodTestDescriptor.java:66 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.lambda$prepare$2( NodeTestTask.java:123 ) at org.junit.platform.engine.support .hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.prepare( NodeTestTask.java:123 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.execute( NodeTestTask.java:90 ) at java.base/java.util.ArrayList.forEach( ArrayList.java:1541 ) at org.junit.platform.engine.support .hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll( SameThreadHierarchicalTestExecutorService.java:41 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.lambda$executeRecursively$6( NodeTestTask.java:155 ) at org.junit.platform.engine.support .hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.lambda$executeRecursively$8( NodeTestTask.java:141 ) at org.junit.platform.engine.support .hierarchical.Node.around( Node.java:137 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.lambda$executeRecursively$9( NodeTestTask.java:139 ) at org.junit.platform.engine.support .hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.executeRecursively( NodeTestTask.java:138 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.execute( NodeTestTask.java:95 ) at java.base/java.util.ArrayList.forEach( ArrayList.java:1541 ) at org.junit.platform.engine.support .hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll( SameThreadHierarchicalTestExecutorService.java:41 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.lambda$executeRecursively$6( NodeTestTask.java:155 ) at org.junit.platform.engine.support .hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.lambda$executeRecursively$8( NodeTestTask.java:141 ) at org.junit.platform.engine.support .hierarchical.Node.around( Node.java:137 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.lambda$executeRecursively$9( NodeTestTask.java:139 ) at org.junit.platform.engine.support .hierarchical.ThrowableCollector.execute( ThrowableCollector.java:73 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.executeRecursively( NodeTestTask.java:138 ) at org.junit.platform.engine.support .hierarchical.NodeTestTask.execute( NodeTestTask.java:95 ) at org.junit.platform.engine.support .hierarchical.SameThreadHierarchicalTestExecutorService.submit( SameThreadHierarchicalTestExecutorService.java:35 ) at org.junit.platform.engine.support .hierarchical.HierarchicalTestExecutor.execute( HierarchicalTestExecutor.java:57 ) at org.junit.platform.engine.support .hierarchical.HierarchicalTestEngine.execute( HierarchicalTestEngine.java:54 ) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute( EngineExecutionOrchestrator.java:107 ) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute( EngineExecutionOrchestrator.java:88 ) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0( EngineExecutionOrchestrator.java:54 ) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams( EngineExecutionOrchestrator.java:67 ) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute( EngineExecutionOrchestrator.java:52 ) at org.junit.platform.launcher.core.DefaultLauncher.execute( DefaultLauncher.java:114 ) at org.junit.platform.launcher.core.DefaultLauncher.execute( DefaultLauncher.java:86 ) at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute( DefaultLauncherSession.java:86 ) at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute( SessionPerRequestLauncher.java:53 ) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs( JUnit5IdeaTestRunner.java:57 ) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute( IdeaTestRunner.java:38 ) at com.intellij.rt.execution.junit.TestsRepeater.repeat( TestsRepeater.java:11 ) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs( IdeaTestRunner.java:35 ) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart( JUnitStarter.java:232 ) at com.intellij.rt.junit.JUnitStarter.main( JUnitStarter.java:55 ) Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberController' defined in file [C:\Users\hyk46\hwang-spring\hwang-spring\out\production\classes\hwang\hwangspring\controller\MemberController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'memberService' defined in class path resource [hwang/hwangspring/SpringConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [hwang.hwangspring.service.MemberService]: Factory method 'memberService' threw exception; nested exception is java.lang.ClassCastException: class hwang.hwangspring.repository.JpaMemberRepository cannot be cast to class hwang.hwangspring.repository.MemoryMemberRepository (hwang.hwangspring.repository.JpaMemberRepository and hwang.hwangspring.repository.MemoryMemberRepository are in unnamed module of loader 'app') at org.springframework.beans.factory.support .ConstructorResolver.createArgumentArray( ConstructorResolver.java:800 ) at org.springframework.beans.factory.support .ConstructorResolver.autowireConstructor( ConstructorResolver.java:229 ) at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.autowireConstructor( AbstractAutowireCapableBeanFactory.java:1372 ) at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.createBeanInstance( AbstractAutowireCapableBeanFactory.java:1222 ) at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.doCreateBean( AbstractAutowireCapableBeanFactory.java:582 ) at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.createBean( AbstractAutowireCapableBeanFactory.java:542 ) at org.springframework.beans.factory.support .AbstractBeanFactory.lambda$doGetBean$0( AbstractBeanFactory.java:335 ) at org.springframework.beans.factory.support .DefaultSingletonBeanRegistry.getSingleton( DefaultSingletonBeanRegistry.java:234 ) at org.springframework.beans.factory.support .AbstractBeanFactory.doGetBean( AbstractBeanFactory.java:333 ) at org.springframework.beans.factory.support .AbstractBeanFactory.getBean( AbstractBeanFactory.java:208 ) at org.springframework.beans.factory.support .DefaultListableBeanFactory.preInstantiateSingletons( DefaultListableBeanFactory.java:955 ) at org.springframework.context.support .AbstractApplicationContext.finishBeanFactoryInitialization( AbstractApplicationContext.java:920 ) at org.springframework.context.support .AbstractApplicationContext.refresh( AbstractApplicationContext.java:583 ) at org.springframework.boot.SpringApplication.refresh( SpringApplication.java:731 ) at org.springframework.boot.SpringApplication.refreshContext( SpringApplication.java:408 ) at org.springframework.boot.SpringApplication.run ( SpringApplication.java:307 ) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext( SpringBootContextLoader.java:136 ) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal( DefaultCacheAwareContextLoaderDelegate.java:141 ) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext( DefaultCacheAwareContextLoaderDelegate.java:90 ) ... 71 more Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'memberService' defined in class path resource [hwang/hwangspring/SpringConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [hwang.hwangspring.service.MemberService]: Factory method 'memberService' threw exception; nested exception is java.lang.ClassCastException: class hwang.hwangspring.repository.JpaMemberRepository cannot be cast to class hwang.hwangspring.repository.MemoryMemberRepository (hwang.hwangspring.repository.JpaMemberRepository and hwang.hwangspring.repository.MemoryMemberRepository are in unnamed module of loader 'app') at org.springframework.beans.factory.support .ConstructorResolver.instantiate( ConstructorResolver.java:658 ) at org.springframework.beans.factory.support .ConstructorResolver.instantiateUsingFactoryMethod( ConstructorResolver.java:486 ) at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod( AbstractAutowireCapableBeanFactory.java:1352 ) at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.createBeanInstance( AbstractAutowireCapableBeanFactory.java:1195 ) at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.doCreateBean( AbstractAutowireCapableBeanFactory.java:582 ) at org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.createBean( AbstractAutowireCapableBeanFactory.java:542 ) at org.springframework.beans.factory.support .AbstractBeanFactory.lambda$doGetBean$0( AbstractBeanFactory.java:335 ) at org.springframework.beans.factory.support .DefaultSingletonBeanRegistry.getSingleton( DefaultSingletonBeanRegistry.java:234 ) at org.springframework.beans.factory.support .AbstractBeanFactory.doGetBean( AbstractBeanFactory.java:333 ) at org.springframework.beans.factory.support .AbstractBeanFactory.getBean( AbstractBeanFactory.java:208 ) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate( DependencyDescriptor.java:276 ) at org.springframework.beans.factory.support .DefaultListableBeanFactory.doResolveDependency( DefaultListableBeanFactory.java:1391 ) at org.springframework.beans.factory.support .DefaultListableBeanFactory.resolveDependency( DefaultListableBeanFactory.java:1311 ) at org.springframework.beans.factory.support .ConstructorResolver.resolveAutowiredArgument( ConstructorResolver.java:887 ) at org.springframework.beans.factory.support .ConstructorResolver.createArgumentArray( ConstructorResolver.java:791 ) ... 89 more Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [hwang.hwangspring.service.MemberService]: Factory method 'memberService' threw exception; nested exception is java.lang.ClassCastException: class hwang.hwangspring.repository.JpaMemberRepository cannot be cast to class hwang.hwangspring.repository.MemoryMemberRepository (hwang.hwangspring.repository.JpaMemberRepository and hwang.hwangspring.repository.MemoryMemberRepository are in unnamed module of loader 'app') at org.springframework.beans.factory.support .SimpleInstantiationStrategy.instantiate( SimpleInstantiationStrategy.java:185 ) at org.springframework.beans.factory.support .ConstructorResolver.instantiate( ConstructorResolver.java:653 ) ... 103 more Caused by: java.lang.ClassCastException: class hwang.hwangspring.repository.JpaMemberRepository cannot be cast to class hwang.hwangspring.repository.MemoryMemberRepository (hwang.hwangspring.repository.JpaMemberRepository and hwang.hwangspring.repository.MemoryMemberRepository are in unnamed module of loader 'app') at hwang.hwangspring.SpringConfig.memberService( SpringConfig.java:29 ) at hwang.hwangspring.SpringConfig$$EnhancerBySpringCGLIB$$f992599.CGLIB$memberService$0(<generated>) at hwang.hwangspring.SpringConfig$$EnhancerBySpringCGLIB$$f992599$$FastClassBySpringCGLIB$$aa36e038.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invokeSuper( MethodProxy.java:244 ) at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept( ConfigurationClassEnhancer.java:331 ) at hwang.hwangspring.SpringConfig$$EnhancerBySpringCGLIB$$f992599.memberService(<generated>) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:62 ) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43 ) at java.base/java.lang.reflect.Method.invoke( Method.java:566 ) at org.springframework.beans.factory.support .SimpleInstantiationStrategy.instantiate( SimpleInstantiationStrategy.java:154 ) ... 104 more





