[SPRING] Spring @ContextConfiguration XML에 올바른 위치를 두는 법
SPRINGSpring @ContextConfiguration XML에 올바른 위치를 두는 법
우리 프로젝트에서 컨트롤러가 올바른 모델보기를 반환하는지 확인하기위한 테스트를 작성하고 있습니다.
@Test
public void controllerReturnsModelToOverzichtpage()
{
ModelAndView modelView = new ModelAndView();
KlasoverzichtController controller = new KlasoverzichtController();
modelView = controller.showOverzicht();
assertEquals("Klasoverzichtcontroller returns the wrong view ", modelView.getViewName(), "overzicht");
}
예외 null가 돌려 주어집니다.
@context 구성을 구성 중입니다. 그러나 src \ main \ webapp \ root \ WEB-INF \ root-context.xml에있는 올바른 xml을로드하는 방법을 알지 못합니다.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class TestOverzichtSenario{
....
이 문서는 이해하기에 충분하지 않습니다.
컨텍스트 어노테이션이 올바른 XML을로드하는 방법에 대한 제안 사항은 무엇입니까?
v2 수정
웹 INF 폴더의 구성 .xml 파일을 다음 위치로 복사했습니다.
src\main\resources\be\..a bunch of folders..\configuration\*.xml
웹 inf에서 web.xml을 다음으로 변경했습니다.
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:configuration/root-context.xml
classpath*:configuration/applicationContext-security.xml
</param-value>
이제 오류가 발생합니다.
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/mvc-dispatcher-servlet.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/mvc-dispatcher-servlet.xml]
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341)
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124)
org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:93)
org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:467)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:397)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:442)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:458)
org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:339)
org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:306)
org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127)
javax.servlet.GenericServlet.init(GenericServlet.java:212)
com.springsource.insight.collection.tcserver.request.HttpRequestOperationCollectionValve.invoke(HttpRequestOperationCollectionValve.java:80)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:379)
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.lang.Thread.run(Unknown Source)
해결법
-
==============================
1.그것이 webapp에 구성을 넣지 않는 이유입니다.
그것이 webapp에 구성을 넣지 않는 이유입니다.
지금까지 내가 아는 한, 단위 테스트에서 webapp 폴더에있는 파일에 액세스하는 좋은 방법이 없습니다. 컨피규레이션을 src / main / resources에 넣을 수 있기 때문에 단위 테스트 (docs에서 설명)와 webapp (contextConfigLocation의 classpath : 접두사 사용)에서 액세스 할 수 있습니다.
참조 :
-
==============================
2.우리의 테스트는 다음과 같다 (Maven과 Spring 3.1 사용).
우리의 테스트는 다음과 같다 (Maven과 Spring 3.1 사용).
@ContextConfiguration ( { "classpath:beans.xml", "file:src/main/webapp/WEB-INF/spring/applicationContext.xml", "file:src/main/webapp/WEB-INF/spring/dispatcher-data-servlet.xml", "file:src/main/webapp/WEB-INF/spring/dispatcher-servlet.xml" } ) @RunWith(SpringJUnit4ClassRunner.class) public class CCustomerCtrlTest { @Resource private ApplicationContext m_oApplicationContext; @Autowired private RequestMappingHandlerAdapter m_oHandlerAdapter; @Autowired private RequestMappingHandlerMapping m_oHandlerMapping; private MockHttpServletRequest m_oRequest; private MockHttpServletResponse m_oResp; private CCustomerCtrl m_oCtrl; // more code .... }
-
==============================
3.이것은 내가 생각하는 maven 특정 문제이다. Maven은 / src / main / resources 파일을 target-test 폴더에 복사하지 않습니다. 이 방법을 절대적으로 원한다면 리소스 플러그인을 구성하여 직접해야 할 것입니다.
이것은 내가 생각하는 maven 특정 문제이다. Maven은 / src / main / resources 파일을 target-test 폴더에 복사하지 않습니다. 이 방법을 절대적으로 원한다면 리소스 플러그인을 구성하여 직접해야 할 것입니다.
더 쉬운 방법은 테스트 특정 컨텍스트 정의를 / src / test / resources 디렉토리에두고 다음을 통해로드하는 것입니다.
@ContextConfiguration(locations = { "classpath:mycontext.xml" })
-
==============================
4.간단한 해결책은
간단한 해결책은
@ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/applicationContext.xml" })
봄의 포럼에서
-
==============================
5.우리는 사용:
우리는 사용:
@ContextConfiguration(locations="file:WebContent/WEB-INF/spitterMVC-servlet.xml")
프로젝트가 동적 인 동적 인 웹 프로젝트 인 경우 경로는 다음과 같습니다.
{project name}/WebContent/WEB-INF/spitterMVC-servlet.xml
-
==============================
6.테스트를 위해 app-context.xml과 독립적 인 test-context.xml을 만들고, test-context.xml을 / src / test / resources 아래에 배치한다고 가정합니다. 테스트 클래스에서 @ContextConfiguration 주석을 클래스 정의 위에 놓습니다.
테스트를 위해 app-context.xml과 독립적 인 test-context.xml을 만들고, test-context.xml을 / src / test / resources 아래에 배치한다고 가정합니다. 테스트 클래스에서 @ContextConfiguration 주석을 클래스 정의 위에 놓습니다.
@ContextConfiguration(locations = "/test-context.xml") public class MyTests { ... }
Spring 문서 컨텍스트 관리
-
==============================
7.다음 위치에서 파일로드 : {project} /src/main/webapp/WEB-INF/spring-dispatcher-servlet.xml
다음 위치에서 파일로드 : {project} /src/main/webapp/WEB-INF/spring-dispatcher-servlet.xml
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring-dispatcher-servlet.xml" }) @WebAppConfiguration public class TestClass { @Test public void test() { // test definition here.. } }
-
==============================
8.@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (locations = { "/Beans.xml"}) 공용 클래스 DemoTest {}
@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (locations = { "/Beans.xml"}) 공용 클래스 DemoTest {}
-
==============================
9.때로는 클린업으로 인해 테스트 클래스 폴더에 리소스 파일이 누락 된 것과 같은 간단한 작업 일 수도 있습니다.
때로는 클린업으로 인해 테스트 클래스 폴더에 리소스 파일이 누락 된 것과 같은 간단한 작업 일 수도 있습니다.
from https://stackoverflow.com/questions/4377699/spring-contextconfiguration-how-to-put-the-right-location-for-the-xml by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] @Transactional 읽기 전용 전파 스프링 (0) | 2018.12.11 |
---|---|
[SPRING] @RequestBody와 @RequestParam의 차이점은 무엇입니까? (0) | 2018.12.11 |
[SPRING] Spring - 동일한 애플리케이션에서 여러 트랜잭션 관리자를 사용할 수 있습니까? (0) | 2018.12.11 |
[SPRING] 스프링 JPA로 소프트 삭제 처리하기 (0) | 2018.12.11 |
[SPRING] 스프링 MVC - @RequestBody와 @RequestParam을 함께 사용할 수없는 이유 (0) | 2018.12.11 |