2

我在 StackOverflow 上看到了这个问题的几个变体,但没有一个能准确描述我的场景,也没有提供适合我的解决方案。

我正在构建一个 Java EE 网页游戏。我在构建过程中使用 JUnit 进行单元测试。在我的 webapp 文件夹中,我有用户通过 HTTP GET 请求访问的资产。在我的源代码中,我有相应的 Java 类来实现这些资产的逻辑。

例如,我有一个名为 CookingPot 的类,它在我的游戏中实现了烹饪锅的逻辑。在 webapp 文件夹中,我有一个文件为用户提供烹饪锅的媒体和内容,例如:

webapp/assets/items/CookingPot.svg (an image of the cooking pot)
webapp/assets/items/CookingPot.html (an HTML description of the cooking pot)

在单元测试期间,我想确保对于每个游戏项目(在本例中为 CookingPot 项目),在 webapp 文件夹中的正确位置都有一个 SVG 和 HTML 文件。

我该如何实施这个测试?JUnit 测试在 Maven 构建环境中执行,该环境不提供 Tomcat 服务器进行测试,因此无法通过 HTTP 访问它们。我试过了:

URL svg = getClass().getResource("/webapp/assets/items/CookingPot.svg");
URL svg = getClass().getResource("webapp/assets/items/CookingPot.svg");

但是那些返回null。

我有一种感觉,我在这里缺少一些简单的东西,但我不知道它是什么。当然必须有一种方法来测试这些文件在构建过程中是否存在?

提前感谢您的帮助!

4

1 回答 1

2

src/main/webapp文件夹不是类路径的一部分(默认情况下)。因此,您无法使用您在问题中提供的代码访问它们。如果您的文件将成为您的一部分,则无需进一步配置即可从您的单元测试中src/main/resources访问它们。.getResource("")

修改 Surefire 插件并包含该webapp文件夹可以使用您当前的设置解决您的问题(就像这里提到的:Maven 中的单元测试需要访问 src/main/webapp 目录):

  <plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.2</version>
    <configuration>
      <additionalClasspathElements>
        <additionalClasspathElement>src/main/webapp</additionalClasspathElement>
      </additionalClasspathElements>
    </configuration>
  </plugin>
于 2020-01-16T15:47:21.533 回答