如何确定使用Maven可用于测试的资源?

时间:2011-08-16 15:27:31

标签: java unit-testing maven

我的问题的背景在这里给出:How to configure pom for StrutsTestCase so that web.xml is found?

在我的pom.xml我已经包含以下内容,希望在测试期间提供各种文件:

<testResources>
  <testResource>
    <directory>src/test/java</directory>
    <includes>
      <include>*.*</include>
    </includes>
  </testResource>
  <testResource>
    <directory>webapp/WEB-INF</directory>
    <includes>
      <include>*.xml</include>
    </includes>
  </testResource>
</testResources>

我的期望是src/test/java中的所有内容都可以在测试期间使用,web.xml中的struts-config.xmlwebapp/WEB-INF也是如此。

测试期间未找到web.xml文件。在排除故障时,我有两个问题。

  1. 我不完全确定我在哪里(或者应该)告诉我的其他代码寻找web.xml
  2. 我不知道在运行测试时如何验证web.xml是否可用。
  3. 现在,我问#2。如何验证上面的XML是否正在按照我的想法进行,并使web.xml可用于测试?

3 个答案:

答案 0 :(得分:1)

除非您在测试类路径本身上需要部署描述符(即web.xmlstruts-config.xml等)(例如,要通过{{1}查找}),那么你不需要在POM中添加或修改classloader.getResource*。尝试在测试设置中查找文件,如下所示:

testResources

(注意:在继续执行测试之前,可以使用 assumeTrue 来确保文件作为前提条件存在,但此方法可以替换为期望的。)

答案 1 :(得分:1)

我认为您的配置问题可能是您已将“WEB-INF”列为<testResource>的一部分。你可能想要的是更像这样的东西:

<testResources>
    <testResource>
        <directory>webapp</directory>
    </testResource>
</testResources>

(或者,如果您使用Standard Directory Layout提到的here,则directory将改为src/main/webapp。)

而且,如果您只想在WEB-INF目录中包含XML文件,那么您还需要一些额外的“includes”配置:

<testResources>
    <testResource>
        <directory>webapp</directory>
    </testResource>
    <includes>
        <include>WEB-INF/*.xml</include>
    </includes>
</testResources>

为了测试在测试运行期间这些文件在类路径中实际可用,您可以执行以下操作:

URL webXml = getClass().getClassLoader().getResource("WEB-INF/web.xml");
assumeNotNull(webXml);

(如上所述hereassumeNotNull的使用是可选的。)

答案 2 :(得分:0)

我认为您需要更改xml文件的路径,以将它们包含在测试路径中。

尝试:

<testResource>
   <directory>src/main/webapp/WEB-INF</directory>
   <includes>
      <include>*.xml</include>
   </includes>
</testResource>