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