2014-01-28 2 views
1

Junit 테스트에서 동일한 애플리케이션 컨텍스트 설정 파일을 사용해야한다고 생각합니다! 그 맞습니까?스프링 MVC Junit 테스트 ApplicationContext Config

내가 가진 문제는, 문제없이 내 스프링 MVC 응용 프로그램을 실행할 수 있으며 컨트롤러 중 하나를 테스트하기 위해 새 junit 테스트를 추가하려고하는데 테스트를 실행할 수도 없습니다. 응용 프로그램이 완벽하게 잘 실행되고 있기 때문에 분명히 응용 프로그램 컨텍스트 파일은 문제가 아닙니다. 그래서 질문은 어떻게 기존 애플 리케이션 컨텍스트 설정 파일을 사용하여 junit 테스트를 실행할 수 있습니까? 모든 링크 또는 예를 들어 주시면 감사하겠습니다. 현재 내 응용 프로그램 컨텍스트 파일 내 web.xml에

/src/main/webapp/WEB-INF/*-appContext.xml

에있는

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/*-appContext.xml 
    </param-value> 
</context-param> 

내가 실행하는 데 문제가 없다 응용 프로그램하지만 테스트를 실행할 수 없습니다.

java.lang.IllegalStateException: Failed to load ApplicationContext 
    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:99) 
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:122) 
    at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:105) 

테스트 클래스에서; 또한 내가 "*"

file:src/main/webapp/WEB-INF/*-appContext.xml 

를 사용하여 시도하고 다른 사람

<import resource="file:src/main/webapp/WEB-INF/mvc-appContext.xml"/> 
<import resource="file:src/main/webapp/WEB-INF/mongo-appContext.xml"/> 

를 가져 오는 하나의 XML을 사용하여 여러 파일

@ContextConfiguration(locations = { 
     "file:src/main/webapp/WEB-INF/mvc-appContext.xml", 
     "file:src/main/webapp/WEB-INF/mongo-appContext.xml"}) 

를 사용하려고 시도하지만

@RunWith(SpringJUnit4ClassRunner.class) 
@WebAppConfiguration 
@ContextConfiguration("file:src/main/webapp/WEB-INF/mvc-appContext.xml") 
public class AppTests { 
    private MockMvc mockMvc; 

그들 중 누구도 junit te를 위해 일하지 않는다. 찌르기! 그래서 config 파일을 어디에 두어야합니까?

다른 콩을 초기화하지 않는 것 같습니다! 나는 세 번째 목록 "MyAppConfig"(주석)을 가지고 내 경우에는

@RunWith(SpringJUnit4ClassRunner.class) 
@WebAppConfiguration 
@ContextHierarchy({ 
    @ContextConfiguration(classes = MyAppConfig.class), 
    @ContextConfiguration(locations = "file:src/main/webapp/WEB-INF/jsp-controller.xml"), 
    @ContextConfiguration("file:src/main/webapp/WEB-INF/rest-controller.xml")}) 

public class TestController { 

    @Autowired 
    private WebApplicationContext wac; 
    private MockMvc mockMvc; 

    @Before 
    public void setUp() { 
     this.mockMvc = webAppContextSetup(this.wac).build(); 
    } 

: 여기

 java.lang.IllegalStateException: Failed to load ApplicationContext 
    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:99) 
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:122) 
    at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:105) 
    at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:74) 
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:312) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:284) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:160) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63) 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'verificationTokenService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.pcd.core.repository.UserRepository com.pcd.core.service.VerificationTokenService.userRep; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.pcd.core.repository.UserRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:288) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1116) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
    at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:128) 
    at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:60) 
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:100) 
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:248) 
    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContextInternal(CacheAwareContextLoaderDelegate.java:64) 
    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:91) 
    ... 23 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.pcd.core.repository.UserRepository com.pcd.core.service.VerificationTokenService.userRep; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.pcd.core.repository.UserRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:514) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:285) 
    ... 39 more 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.pcd.core.repository.UserRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:988) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:858) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:770) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:486) 
    ... 41 more 
+0

로딩되지 않는 정확한 빈을 표시하고 (전체 스택 추적 게시)로드하려는 컨텍스트에 정의 된 위치를 표시해야합니다. 귀하의 구성이 나에게 맞는 것 같습니다. –

+0

좋아요, 게시물을 업데이트했습니다. 충분한 정보가 있습니까? – Jaxox

+0

이제 우리는'UserRepository' 빈을 찾을 수 없다는 것을 알고 있습니다. 정의 된 부분을 살펴 보겠습니다. –

답변

1

내가 내 테스트를 구성하는 방법입니다. 나는 당신에게 예를 보여주었습니다. 귀하의 경우 제거 할 수 있습니다 @ContextConfiguration(classes = MyAppConfig.class),

위의 특정 파일을 포함하도록 편집하십시오.

희망이 있습니다.

+0

감사합니다,하지만 그것을 시도했지만 여전히 동일한 예외를 던지고 : ( – Jaxox

+0

감사합니다.내 예제를 setUp()을 포함하도록 확장했다. setUp()을 게시 할 수 있습니까? – lorinpa

+0

은 (는) 당신과 동일합니다! – Jaxox

0

테스트 용으로 별도의 리소스 폴더를 만듭니다. classpath에 설정하십시오.
다음과 같이로드 할 수 있습니다.

@ContextConfiguration(locations = {"classpath:applicationContext.xml"}) 
관련 문제