web-dev-qa-db-ja.com

Spring @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を返します。

現在、@ contextconfigurationを構成していますが、src\main\webapp\root\WEB-INF\root-context.xmlにある適切なxmlをロードする方法がわかりません

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

このドキュメントは理解するのに十分明確ではありません

Contextannotationが正しいxmlをロードするようにする方法に関する提案はありますか?

v2を編集

WebINFフォルダーから構成.xmlファイルをコピーしました

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)
50
David

これが、構成をwebappに入れない理由です。

私の知る限り、単体テストからwebappフォルダー内のファイルにアクセスする良い方法はありません。代わりに構成をsrc/main/resourcesに入れて、ユニットテスト(ドキュメントで説明)およびwebappから(contextConfigLocationclasspath:プレフィックスを使用して)アクセスできるようにします。

以下も参照してください:

40
axtavt

テストは次のようになります(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 ....
}
69
bernd

これは私が考えるMaven特有の問題です。 Mavenは/src/main/resourcesの形式のファイルをtarget-testフォルダーにコピーしません。絶対にこの方法を使用したい場合は、リソースプラグインを設定して、これを自分で行う必要があります。

簡単な方法は、代わりに/src/test/resourcesディレクトリにテスト固有のコンテキスト定義を置き、次の方法でロードすることです:

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

シンプルなソリューションは

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

from スプリングフォーラム

10
Bala

を使用しております:

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

プロジェクトはEclipse動的Webプロジェクトであり、パスは次のとおりです。

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

テスト用にapp-context.xmlから独立したtest-context.xmlを作成する場合、test-context.xmlを/ src/test/resourcesの下に配置します。テストクラスで、クラス定義の上に@ContextConfigurationアノテーションを付けます。

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

Springドキュメント コンテキスト管理

4
Dino Tw

ファイルの読み込み元:{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..          
    }
}
3
Arpit

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = {"/Beans.xml"})パブリッククラスDemoTest {}

0
Deepu Surendran