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

标签 junit web-applications java-ee-8

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

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

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

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。

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

预先感谢您的帮助!

最佳答案

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>

关于junit - 在单元测试期间访问 webapp 文件夹中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59767662/

相关文章:

java - 模拟 jooq 选择请求

java - 关于 tomcat 服务 webapps 和 web-inf 的问题

java - hibernate @ManyToMany,错误: relation does not exists

java - JUnit 中的断言解决方法

java - 捕获 Java 生成的 JFrame 弹出窗口

java - Mockito:是否在没有 @RunWith(MockitoJUnitRunner.class) 的情况下启用框架使用验证

javascript - WebApp 基本问题

node.js - 架构:有效地计算和维护类似 Reddit 的网站中用户提交的分数

java - 如果在 Wildfly 13 EE8 上部署多个应用程序,Infinispan 命令调度程序会出现问题

jakarta-ee - Weblogic Server 何时支持 Java EE 8?