programing

Spring @ContextXml에 적합한 위치를 지정하는 방법

jooyons 2023. 8. 23. 21:47
반응형

Spring @ContextXml에 적합한 위치를 지정하는 방법

우리 프로젝트에서는 컨트롤러가 올바른 모델 뷰를 반환하는지 확인하기 위해 테스트를 작성하고 있습니다.

@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\에 있는 올바른 xml을 로드하는 방법을 알 수 없습니다.WEB-INF\root-context.xml

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class TestOverzichtSenario{
....

이 문서는 이해하기에 충분히 명확하지 않습니다.

컨텍스트 주석이 올바른 xml을 로드하는지 확인하는 방법에 대한 제안이 있습니까?

v2 편집

웹에서 구성 .xml 파일을 복사했습니다.INF 폴더 대상

src\main\resources\be\..a bunch of folders..\configuration\*.xml 

그리고 webinf의 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)

테스트 결과는 다음과 같습니다(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 ....
}

이러한 이유로 구성을 에 넣지 않습니다.webapp.

제가 아는 한, 파일에 액세스할 수 있는 좋은 방법은 없습니다.webapp장치 테스트의 폴더입니다.구성을 에 넣을 수 있습니다.src/main/resources대신, 웹 앱(사용)뿐만 아니라 장치 테스트(문서에 설명된 대로)에서도 액세스할 수 있습니다.classpath:의 접두사.contextConfigLocation).

참고 항목:

이것은 제가 생각하는 놀라운 특정 문제입니다.메이븐은 파일 양식을 복사하지 않습니다./src/main/resources대상-테스트 폴더로 이동합니다.이 방법을 사용하려면 리소스 플러그인을 구성하여 직접 이 작업을 수행해야 합니다.

더 쉬운 방법은 대신 테스트별 컨텍스트 정의를/src/test/resources디렉터리 및 로드 방법:

@ContextConfiguration(locations = { "classpath:mycontext.xml" })

간단한 해결책은

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

춘계 포럼에서.

사용자:

@ContextConfiguration(locations="file:WebContent/WEB-INF/spitterMVC-servlet.xml")

이 프로젝트는 이클립스 동적 웹 프로젝트이며 경로는 다음과 같습니다.

{project name}/WebContent/WEB-INF/spitterMVC-servlet.xml

테스트를 위해 app-context.xml과 독립적인 test-context.xml을 생성한다고 가정하고 /src/test/resources 아래에 test-context.xml을 놓습니다.테스트 클래스에서 클래스 정의 맨 위에 @ContextConfiguration 주석을 배치합니다.

@ContextConfiguration(locations = "/test-context.xml")
public class MyTests {
    ...
}

Spring 문서 컨텍스트 관리

파일 로드 위치:{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..          
    }
}

@런 위드(스프링)JUNit4ClassRunner.class)@ContextConfiguration(위치 = {"/Beans.xml")} 공용 클래스 DemoTest{}

일부 정리로 인해 테스트 클래스 폴더에 리소스 파일이 누락되는 등의 간단한 문제가 발생할 수 있습니다.

언급URL : https://stackoverflow.com/questions/4377699/spring-contextconfiguration-how-to-put-the-right-location-for-the-xml

반응형