我知道有关spring xml配置文件的问题在执行中未被发现过几次,但是其他答案似乎都不适用于我。
我正在尝试使用Spring和JUnit在Maven项目中运行一些测试,我总是得到这个错误:
T E S T S. 运行es.udc.jcastedo.NosaTenda.test.model.productoService.ProductoServiceTest 12-ago-2014 13:37:33 org.springframework.test.context.TestContextManager retrieveTestExecutionListeners 信息:无法实例化TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener]。指定自定义侦听器类或使默认侦听器类(及其所需的依赖项)可用。违规类:[javax / servlet / ServletContext] 12-ago-2014 13:37:33 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 信息:刷新org.springframework.context.support.ClassPathXmlApplicationContext@2f8bbc98:启动日期[Tue Aug 12 13:37:33 CEST 2014];上下文层次结构的根 12-ago-2014 13:37:33 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 信息:从类路径资源[nosaTenda-spring-config.xml]加载XML bean定义 测试运行:2,失败:0,错误:2,跳过:0,经过的时间:0.225秒<<< FAILURE!
结果:
错误测试: es.udc.jcastedo.NosaTenda.test.model.productoService.ProductoServiceTest es.udc.jcastedo.NosaTenda.test.model.productoService.ProductoServiceTest:无法初始化类es.udc.jcastedo.NosaTenda.test.model.util.DbUtil
测试运行:2,失败:0,错误:2,跳过:0
这是指向“万无一失”报告的完整描述的链接:https://dl.dropboxusercontent.com/u/2635926/es.udc.jcastedo.NosaTenda.test.model.productoService.ProductoServiceTest.txt
你可以在哪里找到这一行:
引起:org.springframework.beans.factory.BeanDefinitionStoreException:IOException从类路径资源[nosaTenda-spring-config.xml]解析XML文档;嵌套异常是java.io.FileNotFoundException:无法打开类路径资源[nosaTenda-spring-config.xml],因为它不存在
引起:java.io.FileNotFoundException:无法打开类路径资源[nosaTenda-spring-config.xml],因为它不存在
es.udc.jcastedo.NosaTenda.test.model.productoService.ProductoServiceTest已用时间:0.003秒<<<错误! java.lang.NoClassDefFoundError:无法初始化类es.udc.jcastedo.NosaTenda.test.model.util.DbUtil at es.udc.jcastedo.NosaTenda.test.model.productoService.ProductoServiceTest.cleanDb(ProductoServiceTest.java:52)
DbUtil是所有测试调用的辅助类,其中初始化上下文:
public class DbUtil {
static {
ApplicationContext context = new ClassPathXmlApplicationContext("nosaTenda-spring-config.xml");
transactionManager = (PlatformTransactionManager) context
.getBean("transactionManager");
productoDao = (ProductoDao) context.getBean("productoDao");
tiendaDao = (TiendaDao) context.getBean("tiendaDao");
}
...
public static void populateDb() {
...
}
public static void cleanDb() throws Throwable {
...
}
}
显然存在问题,因为看起来无论什么都找不到xml配置文件,它在ClassPathXmlApplicationContext方法调用中断开。
理论上,spring配置文件位于src / main / resources中的位置。
我尝试了所有组合,从限定名称“/NosaTenda/src/main/resources/nosaTenda-spring-config.xml”到“nosaTenda-spring-config.xml”,结果相同。
我不知道类路径有什么问题,或者问题是否在其他地方。
修改
这是项目的pom,我只记得我在build-resources部分添加了一些过滤,也许我在那里做错了,这就是问题。
答案 0 :(得分:0)
通常,您的类路径为... / src / main / java /,ClassPathXmlApplicationContext将从... / src / main / resources中读取。 然后你的测试类将在... / src / test / java /和ClassPathXmlApplicationContext中读取... / src / test / resources。
因此,请检查测试应用程序上下文的位置,并在其中放置xml的副本。
答案 1 :(得分:0)
好的,我找到了解决方案,它就在其他地方。
我正在使用带有 forkMode none 参数的运行配置,因为我正在运行单个测试类。 forkMode 显然已被弃用并导致问题。我用 forkCount 0 替换它并且工作得很好,它找到了spring xml配置文件,甚至测试版覆盖了一些参数,如此完美。现在我只需调试配置中的大量其他错误:)
INFO: Loading XML bean definitions from class path resource [nosaTenda-spring-config.xml]
12-ago-2014 17:42:09 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [nosaTenda-spring-config-test.xml]
12-ago-2014 17:42:09 org.springframework.beans.factory.support.DefaultListableBeanFactory registerBeanDefinition
INFO: Overriding bean definition for bean 'dataSource': replacing [Generic bean: class [org.springframework.jndi.JndiObjectFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in class path resource [nosaTenda-spring-config.xml]] with [Generic bean: class [org.springframework.jdbc.datasource.SingleConnectionDataSource]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in class path resource [nosaTenda-spring-config-test.xml]]
感谢。