java - SpringJunit4ClassRunner 的类路径在哪里,如何直接指向我操作系统中的文件?

标签 java spring tomcat junit

我在从我的 JUnit(在我的工作区中运行)访问在我的 Tomcat 中运行的 Spring 上下文时遇到了问题。

我的代码演示:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
    "classpath:/WEB-INF/applicationContext-resources.xml"
})
public class JUnitAccessSpringContextTest
{
}

不幸的是,上面的代码在我的情况下不起作用,因为我工作区中的“applicationContext-resources.xml”的值将在部署到 Tomcat 之前被替换。

问题:

  1. 这里的“类路径”是什么意思?

  2. 我可以更改“类路径”或在此处附加新值,例如我安装的 tomcat 的位置吗?

要解决上述问题,另一种方法是让@ContextConfiguration 直接指向文件。它在我的系统中工作(由以下代码显示),但它不适合实际使用,因为我的“path_to_my_tomcat_application”是硬编码的。

  1. 我能否将某种变量插入到@ContextConfiguration"file"字符串中,例如从属性文件中读取的一些字符串,或通过 System.getenv(System_parameter_value) 的系统值?

更改我的代码:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
    "file:<path_to_my_tomcat_application>/applicationContext-resources.xml"
})
public class JUnitAccessSpringContextTest
{
}

附加信息:

让事情变得更加复杂。我们在该项目的旧 Spring 版本 (2.5) 上运行。但我认为如果有必要,我至少可以更改 spring-test.jar 的版本——它应该不会影响正在运行的项目。我说得对吗?

最佳答案

另一种方法是将 TOMCAT_HOME 设置到我的 Eclipse 的类路径中,并将相对路径写入@ContextConfiguration。

例如,如果我将 TOMCAT_HOME/project_name 设置到我的 Eclipse 的类路径中,则以下代码可以正常工作:

@ContextConfiguration(locations = {
    "classpath:WEB-INF/applicationContext-resources.xml"
})

但是,因为每次部署的“project_name”都不同,所以我不能把它放到我的 Eclipse 路径中, --> 我只能把整个 tomcat 主目录 (TOMCAT_HOME) 放到我的 Eclipse 类路径中。但在这种情况下,以下代码不起作用。为什么?

@ContextConfiguration(locations = {
    "classpath:*/WEB-INF/applicationContext-resources.xml"
})

谢谢!

关于java - SpringJunit4ClassRunner 的类路径在哪里,如何直接指向我操作系统中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16815291/

相关文章:

java - 无法确定 Hibernate PersistenceProvider

spring - Spring Batch-读取和处理多少条记录

java - Thymeleaf 内容助手无法与 Spring Boot 一起使用

tomcat - 网站维护着陆页

java - Tomcat REST API 路径大小

java - 如何获取某个数组元素的键?

java - org.w3c.dom : get element's height and width?

java - Parallel.For 在 Java 中?

java.lang.ClassCastException,通过 JNDI 查找获取 Entitymanager

java - 为什么必须在 lambda 主体中用完整的代码块将 throw 语句括起来?