【问题标题】:How to determine what resources are available for tests using Maven?如何确定哪些资源可用于使用 Maven 进行测试?
【发布时间】:2011-08-16 15:27:31
【问题描述】:

这里给出了我的问题的上下文: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.xmlstruts-config.xml 中的webapp/WEB-INF 也将可用。

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

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

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

【问题讨论】:

  • 您表示要使“pom.xml 可用于测试”?这是准确的,还是您只对web.xmlstruts-config.xml 和其他网络内容感兴趣?

标签: java unit-testing maven


【解决方案1】:

我认为您的配置问题可能是您将“WEB-INF”作为&lt;testResource&gt; 的一部分。你可能想要的是更像这样的东西:

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

(或者,如果您使用提到的here 中的Standard Directory Layout,则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);

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

【讨论】:

  • 美丽。对 pom 的更改正是我所需要的。
【解决方案2】:

除非您需要测试classpath 本身(例如通过classloader.getResource* 查找)上的部署描述符(即web.xmlstruts-config.xml 等),否则应该有无需您在 POM 中添加或修改testResources。尝试简单地在测试设置中查找文件,如下所示:

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

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

【讨论】:

  • @EricWilson 我注意到你 edited 昨天提供的代码示例。你有机会尝试吗?如果是这样,它有效吗?
  • 我认为这可能是一个糟糕的问题。无论上面的&lt;testResources&gt; 标签是否在我的pom.xml 中,您提供的代码都有效。我曾短暂地认为您的回答对我有所帮助,但并没有真正改变。
  • 根据您的问题和您提供的context,听起来您不需要使用&lt;testResources&gt;;您只需要在测试期间访问这些 文件,但它们不需要在测试 classpath 上,因为 &lt;testResource&gt; 配置启用。假设您需要将这些 .xml 文件放在测试类路径中,我将提供一个新答案。否则,我建议的方法应该回答您描述如何从测试中访问这些 xml 文件的问题。
【解决方案3】:

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

试试:

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

【讨论】:

  • 嗯。 . .我的 webapp 目录不在 main.
  • 如果您遵循“The Maven Way”,应该如上所示。
  • 澄清一下,@SingleShot 对“Maven 方式”的引用是Maven Standard Directory Layout。此外,虽然建议您将 Web 内容放置在 src/main/webapp 中,如此处所述,但这不会对您的问题产生影响。
猜你喜欢
  • 2011-09-10
  • 2011-02-28
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
相关资源
最近更新 更多