我在StackOverflow上看到了这个问题的几种变体,但没有一个准确地描述了我的场景,也没有提供适合我的解决方案。
我正在构建一个Java EE网页游戏。 我在构建过程中使用 JUnit 进行单元测试。 在我的 Web 应用程序文件夹中,我有用户通过 HTTP GET 请求访问的资产。 在我的源代码中,我有相应的 Java 类来实现这些资产的逻辑。
例如,我有一个名为 CookPot 的类,它在我的游戏中实现了烹饪锅的逻辑。 在 webapp 文件夹中,我有一个文件,它为用户提供烹饪锅的媒体和内容,例如:
webapp/assets/items/CookingPot.svg (an image of the cooking pot)
webapp/assets/items/CookingPot.html (an HTML description of the cooking pot)
在单元测试期间,我想确保对于每个游戏项(在本例中为 CookPot 项(,在 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
文件夹可以使用您当前的设置解决您的问题(如此处所述: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>