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

Java 如何确定哪些资源可用于使用Maven的测试?,java,unit-testing,maven,Java,Unit Testing,Maven,我的问题的背景如下: 在我的pom.xml中,我包含了以下内容,希望在测试期间提供各种文件: <testResources> <testResource> <directory>src/test/java</directory> <includes> <include>*.*</include> </includes> </testResource&g

我的问题的背景如下:

在我的
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
*.*
webapp/WEB-INF
*.xml
我的期望是,
src/test/java
中的所有内容都将在测试期间可用,就像
webapp/web-INF
中的
web.xml
struts config.xml
一样

测试期间未找到
web.xml
文件。在解决这个问题时,我有两个问题

  • 我不能完全确定我正在(或应该)告诉我的其他代码去哪里查找
    web.xml
  • 我不知道如何在运行测试时验证
    web.xml
    是否可用

  • 现在,我在问#2。我如何验证上面的XML是否正在做我认为应该做的事情,并使
    web.XML
    可用于测试?

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

    尝试:

    
    src/main/webapp/WEB-INF
    *.xml
    
    除非您需要测试类路径本身上的部署描述符(即
    web.xml
    struts config.xml
    ,等等)(例如通过
    classloader.getResource*
    查找),否则您不需要在POM中添加或修改
    testResources
    。尝试在测试设置中查找文件,如下所示:

    File file = new File("webapp/WEB-INF/web.xml");
    assumeTrue(file.exists());
    

    (注意:在继续执行测试之前,可以使用确保文件作为先决条件存在,但此方法可以根据需要进行替换。)

    我认为您的配置可能存在问题,因为您已将“
    WEB-INF
    ”作为
    的一部分。你可能想要的是更像这样的东西:

    <testResources>
        <testResource>
            <directory>webapp</directory>
        </testResource>
    </testResources>
    
    为了在测试运行期间测试这些文件在类路径上是否实际可用,您可以执行以下操作:

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

    (如前所述,使用是可选的。)

    Hmm。我的webapp目录不在main中。如果您遵循“Maven方式”,则应该如上所述。为了澄清,@SingleShot对“Maven方式”的引用是最重要的。此外,尽管建议您的web内容如本文所述放置在
    src/main/webapp
    中,但这不会对您的问题产生影响。@EricWilson我注意到您昨天提供了代码示例。你有机会试一下吗?如果是这样的话,它起作用了吗?我想这可能是个糟糕的问题。无论上面的
    标记是否在my
    pom.xml
    中,您提供的代码都能正常工作。我简单地认为你的回答对我有帮助,但没有什么真正的改变。根据你的问题和你提供的信息,听起来你不需要使用
    ;您只需要在测试期间访问这些文件,但它们不需要位于测试类路径上,因为
    配置启用了这些文件。假设您需要这些.xml文件位于测试类路径上,我将提供一个新的答案。否则,我建议的方法应该回答您的问题,说明如何从测试中访问这些xml文件。您表示希望使“
    pom.xml
    可用于测试”?这是准确的,还是您只对
    web.xml
    struts config.xml
    和其他web内容感兴趣?很好。我需要的是对pom的改变。
    <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);