首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引用来自另一个项目的spring上下文文件: JUnit & Spring

引用来自另一个项目的spring上下文文件: JUnit & Spring
EN

Stack Overflow用户
提问于 2013-12-30 13:59:36
回答 1查看 1.6K关注 0票数 0

我有一个Spring MVC project(contains Controller & jsp files)DAO project(Contains DB operation related files) &这两个项目都是使用注释配置的。MVC项目依赖于DAO项目。现在,我正在为MVC和DAO项目编写JUnit测试。因此,我创建了一个单独的“测试项目”,在其中我添加了MVC项目作为依赖测试,并包含了所有需要的jar文件(JUnit &(Java Build Path -> Projects tab -> Add -> MVC Project & ok)-test.jar)。

我的项目结构:

代码语言:javascript
复制
MVCProject (Depends on DAOProject --> Web App project)
    |
     WebContent
        |
         WEB-INF
            |
             spring-context.xml

DAOProject (Java project)
    |
     src  


TestProject(Depends on MVCProject --> Java project)
    |
     src (packages)
        |
         JunitTestClass.java

以下是我的测试项目代码,

代码语言:javascript
复制
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"file:MVCProjectName/WebContent/WEB-INF/spring-context.xml"})
public class DAOImplTest {

    @Autowired
    private DAO dao;

    String id = null;

    /**
     * Test method for {@link com.xyz.core.dao.DAOImpl#getById(java.lang.String)}.
     */
    @Test
    public void testGetById() {

        id = "12345";
        try {
            dao.getById(id);
        } catch (Exception e) {         
            e.printStackTrace();
        }
    }
}  

我得到‘文件找不到异常’,如下所示。

代码语言:javascript
复制
java.lang.IllegalStateException: Failed to load ApplicationContext
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:308)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:220)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:301)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:303)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from URL [file:../../../../../../../RSPWebAPP/WebContent/WEB-INF/RoadSmartPro-servlet.xml]; nested exception is java.io.FileNotFoundException: MVCProjectName/WebContent/WEB-INF/spring-context.xml (The system cannot find the path specified.)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:81)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:1)
    at org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:280)
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:304)
    ... 24 more
Caused by: java.io.FileNotFoundException: MVCProjectName/WebContent/WEB-INF/spring-context.xml (The system cannot find the path specified.)
    at java.io.FileInputStream.<init>(FileInputStream.java:149)
    at java.io.FileInputStream.<init>(FileInputStream.java:108)
    at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:103)
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:201)
    at org.springframework.core.io.UrlResource.getInputStream(UrlResource.java:124)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328)
    ... 33 more  

但是,When I copy the spring-context.xml file from 'MVC project' into 'Test project' everything works fine。我将上下文文件复制到测试项目中的以下位置,它工作得很好。

代码语言:javascript
复制
TestProject
      |_
         config(packageName)
         |_
            test-spring-context.xml  

及其对应的注解

代码语言:javascript
复制
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:config/test-spring-context.xml"})
public class DAOImplTest {
     .....
     ..... 
}

但我不希望使用这种方法,因为原始上下文文件(spring-context.xml)中的任何更改都不会反映在复制的文件(test-spring-context.xml)中。

有没有办法在“测试项目”中配置原始的上下文文件?请给我一些建议。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-12-30 15:05:29

为什么不使用Maven继承模型呢?这是一个很好的用例,因为你会希望你的测试和你的代码一起进行。此外,对项目依赖项的任何更改都将使用Maven依赖项管理为您处理。我假设两个模块MVC Project和DAOProject打包在一起。

参考:http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20834184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档