我有一个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)。
我的项目结构:
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)中。
有没有办法在“测试项目”中配置原始的上下文文件?请给我一些建议。
提前谢谢。
发布于 2013-12-30 15:05:29
为什么不使用Maven继承模型呢?这是一个很好的用例,因为你会希望你的测试和你的代码一起进行。此外,对项目依赖项的任何更改都将使用Maven依赖项管理为您处理。我假设两个模块MVC Project和DAOProject打包在一起。
参考:http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance
https://stackoverflow.com/questions/20834184
复制相似问题