gpt4 book ai didi

java - 允许依赖项中的类从我的项目的类路径加载测试资源

转载 作者:太空宇宙 更新时间:2023-11-04 14:18:53 25 4
gpt4 key购买 nike

注意:StackOverflow 上有很多类似的问题。区别在于,这些问题涉及在自己的项目中使用另一个项目的资源。我想知道如何从我自己的项目所依赖的另一个项目中存在的类中引用我自己的项目的资源。例如:

我有一个 Maven 项目 (A),其结构如下:

src
test
java
com
mycompany
myproject
SimpleTest.java
resources
com
mycompany
myproject
pictures
mountain.jpg
pom.xml

在项目 A 的 pom.xml 文件中,我有一个如下的资源条目:

<testResources>
<testResource>
<directory>src/test/com/mycompany/myproject/pictures</directory>
</testResource>
</testResources>

项目 A 还依赖于另一个 Maven 项目 (B)。在运行时,项目 A 中的 SimpleTest.java 类将使用以下命令直接从文件系统(而不是从 JAR 或 WAR 文件)启动:

C:\path\to\project\A\mvn clean test

这将从我公司的 Nexus 存储库下载项目 B 作为 JAR 文件,构建项目 A,并使用 TestNG 通过 Surefire 插件在 SimpleTest.java 中运行测试。

假设项目 B 中有一个名为“Helper”的类,其中包含一个“上传”函数,如下所示:

public class Helper {
public static void upload(String filename) {
Class clazz = this.getClass();
ClassLoader classLoader = clazz.getClassLoader();
InputStream inputStream = classLoader.getResourceAsStream(filename);
// TODO: upload file
}
}

现在让我们假设 SimpleTest.java 中的一个测试使用“mountain.jpg”作为参数来调用 Helper.upload。

当前 inputStream 最终为 null。但是,如果文件名参数与项目 B 内的资源文件之一匹配,则上传功能确实可以工作。

在我看来,项目 B 中的类(IE:Helper.class)的类路径上没有项目 A 的资源,即使项目 A 当前正在运行。这对我来说似乎违反直觉。我希望在项目 A 中运行测试时,项目 A 中的所有测试资源都可以从任何类中使用。我怎样才能实现这一点?

最佳答案

只需将 Helper 放入项目 A 中并从 B 中调用它。使其返回 InputStream,而不是对资源执行某些操作,以便 B 可以使用它执行测试操作。

请注意,Class.getResourceAsStream()可能更容易使用。

关于java - 允许依赖项中的类从我的项目的类路径加载测试资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27415064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com