在单元测试期间访问 webapp 文件夹中的文件

Accessing Files In webapp Folder During Unit Testing

我在 Whosebug 上看到了这个问题的几个变体,但是 none 准确描述了我的场景,或者提供了适合我的解决方案。

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

例如,我有一个名为 CookingPot 的 class,它在我的游戏中实现了烹饪锅的逻辑。在 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");

但是那些 return 无效。

我觉得这里缺少一些简单的东西,但我不知道它是什么。肯定有一种方法可以在构建过程中测试这些文件是否存在?

在此先感谢您的帮助!

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

修改 Surefire 插件并包含 webapp 文件夹可以使用您当前的设置解决您的问题(如此处所述:Unit Test in Maven requires access to the src/main/webapp Directory):

  <plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.2</version>
    <configuration>
      <additionalClasspathElements>
        <additionalClasspathElement>src/main/webapp</additionalClasspathElement>
      </additionalClasspathElements>
    </configuration>
  </plugin>