2011-09-19 2 views
11

내 웹 응용 프로그램에 대한 테스트를하고 싶습니다만, autowiring시 컨텍스트 구성이 충돌합니다. servletContext. 아래 오류. Autowiring servletContext는 tomcat/jetty에서 web-app를 실행할 때 잘 작동합니다.유닛 테스트 Spring MVC web-app : autowire 필드를 사용할 수 없습니다 : private javax.servlet.ServletContext

이 java.lang.IllegalStateException : org.springframework.beans.factory.BeanCreationException :에 의해 발생의 ApplicationContext ... 를로드하지 못했습니다 오류 이름 'testController'와 콩 생성 : autowire가 종속성 주입 실패; 중첩 예외는 입니다. org.springframework.beans.factory.BeanCreationException : 할 수 없습니다 autowire 필드 : private javax.servlet.ServletContext com.test.controllers.TestController.servletContext; 이 org.springframework.beans.factory.NoSuchBeanDefinitionException 인 경우 : 에 대해 에 대해 일치하는 bean이 발견되지 않음 : 종속성 : autowire로 간주되는 적어도 하나의 bean 이 종속성에 대한 후보. 종속성 주석 :

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration("classpath:applicationContext.xml") 
public class FirstTest { 

    @Test 
    public void doTest() throws Exception { 
     // ... 
    } 
} 

TestController

@Controller 
public class TestController { 

    @Autowired 
    private ServletContext servletContext; 

    ... 
} 
+1

이 관련 답변을 참조 사라 http://stackoverflow.com/questions/2674697/how-to-inject-servletcontext-for-junit 테스트 - 봄 - – ptomli

+0

감사. '@ ContextConfiguration'과 함께'MockServletContext'를 어떻게 사용합니까? – marioosh

+0

'applicationContext.xml' 파일에'MockServletContext'에 대한 정의가 으로 포함되어 있습니다. – ptomli

답변

24

ptomli 힌트에 따르면, MockServletContext 빈을 정의하면 할 {org.springframework.beans.factory.annotation.Autowired @는 (= TRUE 필수)} 장난.

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tilesConfigurer' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException 

Soultion : applicationContext.xml에서 config (설정) 별도의 타일과 JUnit 테스트에 타일을 사용하지 않는 나타났다

<bean class="org.springframework.mock.web.MockServletContext"/> 

또 다른 문제는, 작동하지 않는, tilesConfigurer했다.

<?xml version="1.0" encoding="UTF-8"?> 
<web-app> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      classpath:applicationContext.xml 
      classpath:tilesConfig.xml 
     </param-value> 
    </context-param> 
</web-app> 
+4

입니다. 또 다른 옵션은 @WebAppConfiguration을 사용하여 테스트 결과를 표시하는 것입니다. – borjab

10

내가 테스트 클래스에서 @WebAppConfiguration을 추가하고 문제가

+0

그리고 이것이 올바른 대답이라고 생각합니다. –

관련 문제