Spring Maven单元测试应用程序上下文加载错误文件

Posted

技术标签:

【中文标题】Spring Maven单元测试应用程序上下文加载错误文件【英文标题】:Spring Maven unitTest applicationContext loading wrong file 【发布时间】:2013-09-05 14:44:09 【问题描述】:

.我有一个项目,它在src/main/webapp/WEB-INF 中有一个 spring-config.xml 文件,在 src/test/resources 中有一个 applicationContext.xml 文件。我在src/test/java 中还有一个用于单元测试的抽象测试基类,看起来像:

@ContextConfiguration(locations = "classpath:/applicationContext.xml")
public abstract class AbstractTestBase extends AbstractTransactionalJUnit4SpringContextTests 
     //Common code and fields

我所有的单元测试都扩展了这个 AbstractTestBase,它指向 src/test/resources 或应该的上下文。运行我的单元测试时出现问题,它正在拉入 spring-config.xml 文件。

我的团队正在处理的其他项目具有相同的文件结构、相同的应用程序上下文设置并按预期运行,但即使我将项目中的每个文件并排放置,我也看不到他们的文件在哪里运行,而这个没有。

我是 spring 新手,所以我不知道我应该寻找什么。

在所有文件都存在的情况下,Spring 或 Maven 是否不会采用我正在处理的应用程序上下文?有什么我可能会丢失的吗?

编辑:更正以反映一个文件是 spring-config 文件。

【问题讨论】:

Maven 应该在src/test/resources 中寻找资源文件。它不应该进入src/main/webapp/WEB-INF,因为它不是一个Web 应用程序,甚至不知道那个位置。如果您从该文件夹中删除(移动)会发生什么? 您确定您的类路径中没有多个applicationContext.xml 文件吗?使用该语法将加载它找到的第一个然后停止,并且 jar 顺序并不总是可预测的。 @SotiriosDelimanolis 这确实看起来像一个Web应用程序,习惯上将Spring配置放在src/main/webapp/WEB-INF中。 @chrylis 这是一个 Web 应用程序,但是在运行测试时不应该有任何 WEB-INF 的概念。 @sparks 除非您实际上将整个服务器作为测试工具的一部分启动,否则它不会;测试配置不需要WEB-INF 中指定的任何内容,而应该只是DispatcherServlet 的配置。 【参考方案1】:

"classpath:/applicationContext.xml" 应该在src/test/resources 下查看。 但应该注意的是,使用该语法将加载它找到的第一个语法,然后按照 '@chrylis' 的说明停止。

我曾经遇到过类似的问题。

您一定一直在使用 IDE。您的项目目录中的target/test-classes/ (in Eclipse IDE) 中必须有applicationContext.xml 文件,该文件是src/main/webapp/WEB-INF 下的xml 文件的副本或类似的xml 文件。

【讨论】:

src/test/resources下只有一个名为applicationContext.xml的文件,而target/test-classes/文件夹下有一个与spring config文件同名的文件(名为spring-config.xml) . 1) 文件名不是applicationContext.xml 2) 如何更改它以加载 applicationContext.xml? 不确定,但我会尝试删除所有 test-classes/ 并再次运行测试。尝试一下。另外,如果我是你,我会重新检查是否遗漏了其他东西。 显然丢弃 test-classes/ 中的所有内容似乎有效。我已经能够超越这个问题(进入其他不相关的问题),但它还没有成为一个问题。

以上是关于Spring Maven单元测试应用程序上下文加载错误文件的主要内容,如果未能解决你的问题,请参考以下文章

编辑并重新运行 Spring Boot 单元测试,无需重新加载上下文以加快测试速度

spring boot单元测试spring context重复加载问题

maven项目的单元测试junit配置文件加载不到

一组单元测试类中的spring应用程序上下文

springboot 单元测试(如何使用基于web的单元测试?)

MongoDB 单元测试