SpringJunit4ClassRunner的classpath在哪里,以及如何在我的操作系统中直接指向文件?

时间:2013-05-29 13:31:02

标签: 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. “classpath”在这里意味着什么?

  2. 我可以在这里更改“classpath”或附加新值,例如我安装的tomcat的位置吗?

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

    1. 我可以将某种变量插入@ContextConfiguration“file”字符串,例如从属性文件读取一些字符串,或通过System.getenv(System_parameter_value)读取系统值?
    2. 更改我的代码:

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

      其他信息:

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

1 个答案:

答案 0 :(得分:0)

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

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

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

但是,因为每次部署&#34; project_name&#34;是不同的,所以我不能把它放到我的Eclipse路径, - &gt;我只能把整个tomcat置于家里(TOMCAT_HOME)进入我的Eclipse类路径。但在这种情况下,以下代码不起作用。为什么呢?

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

谢谢!