如何从JUnit测试中访问webapp下的静态资源?

问题描述:

我写了一个JUnit测试,用于验证服务针对其XSD返回的xml。我最初把XSD放在src/main/resrouces/xsd/<filename>.xsd下但现在我需要将它作为静态资源在webapp之下移动,以便在部署应用程序时公开访问它。如何从JUnit测试中访问webapp下的静态资源?

我宁愿没有两个副本,因为我希望有人迟早会修改错误的。

我当时正在加载文件getClass().getResource("/xsd/<filename>.xsd"),如果资源移动到webapp下,我将如何访问它?

在你的pom中添加它作为资源目录。

<resources> 
    <resource> 
     <directory>src/main/resources</directory> 
    </resource> 
    <resource> 
     <directory>src/main/webapp</directory> 
     <includes> 
      <include>xsd/schema.xsd</include> 
     </includes> 
    </resource> 
</resources> 

在java中使用

String path = "/xsd/schema.xsd"; 
InputStream is = getClass().getResourceAsStream(path); 
+0

我没有测试过这一点,因为我去了另一条路线,最终,但我想它会奏效。 – 2012-03-18 00:23:36

你的资源仍将保留在类路径中,因此通常加载它你现在要做的应该保持工作的方式。

/src/main/webapp内容放置在CLASSPATH创建WAR时和部署,而不是在JUnit测试(无论是在Maven的,在我的IDE)。您必须明确使用它们:

new File("src/main/webapp/xsd/<filename>.xsd"); 

只要项目主目录是运行测试时的当前目录,就应该这样工作。悲伤但真实。