【发布时间】:2013-12-30 05:59:35
【问题描述】:
我有一个 Spring MVC project(contains Controller & jsp files) 和 DAO project(Contains DB operation related files) & 两个项目都是使用注释配置的。 MVC 项目依赖于 DAO 项目。现在,我正在为 MVC 和 DAO 项目编写 JUnit 测试。因此,我创建了一个单独的“测试项目”,其中我将 MVC 项目添加为dependency(Java Build Path -> Projects tab -> Add -> MVC Project & ok),并包含所有需要的 jar 文件(JUnit 和 spring-test.jar)。
我的项目结构:
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
这是我的测试项目代码,
@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();
}
}
}
我收到“找不到文件异常”,如下所示。
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。我将上下文文件复制到测试项目中的以下位置并且工作正常。
TestProject
|_
config(packageName)
|_
test-spring-context.xml
及其对应的注解
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:config/test-spring-context.xml"})
public class DAOImplTest {
.....
.....
}
但我不想要这种方法,因为原始上下文文件 (spring-context.xml) 中的任何更改都不会反映在复制的文件 (test-spring-context.xml) 中。
有没有办法在“测试项目”中配置原始上下文文件?请提出一些建议。
提前致谢。
【问题讨论】:
标签: spring spring-mvc junit junit4