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

时间:2012-02-02 15:10:15

标签: java web-applications maven-2 junit

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

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

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

3 个答案:

答案 0 :(得分:4)

创建和部署WAR时,

/src/main/webapp内容放在CLASSPATH上,但在JUnit测试期间(在maven和我的IDE中)都不会。您必须使用以下方法显式加载它们:

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

只要项目主目录是运行测试时的当前目录,这应该可以工作。悲伤却又是真的。

答案 1 :(得分:3)

在你的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);

答案 2 :(得分:0)

您的资源仍将保留在类路径中,因此通常按照现在的方式加载它应该继续工作。