【问题标题】:Accessing Files In webapp Folder During Unit Testing在单元测试期间访问 webapp 文件夹中的文件
【发布时间】:2020-01-16 10:30:42
【问题描述】:

我在 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。

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

提前感谢您的帮助!

【问题讨论】:

    标签: junit web-applications java-ee-8


    【解决方案1】:

    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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多