当前位置: 首页 > 知识库问答 >
问题:

当应用程序(src/main)运行时,文件是否在类路径上的src/test/resources中?

松铭
2023-03-14

新手来了!我在SO上发现了很多类似的问题,但没有一个给我一个明确的答案。

我尝试过的一个可能的解决方案是不运行这些脚本(从'classpath:db/schema.sql'中删除init=runscript\\从'classpath:db/data.sql'中删除runscript),在测试之前以编程方式创建一些对象并将它们持久化到数据库,然后编写test,但我认为从脚本填充数据比在每个测试类中编写这些代码要容易得多,也更精简。

另一个可能的解决方案是将这些脚本从src/test/resources/db复制到src/main/resources/db,但这意味着我会复制数据,我讨厌这样做。此外,这意味着更难维护。

下一个可能的解决方案是将这些脚本放到src/main/resources/db中,因为正如我所说的,无论这些脚本是在src/main/resources/db还是在src/test/resources/db中,数据持久性测试都能正常工作。但是,这些脚本与测试相关,所以我认为它们不属于应用程序的主要部分。

而且,如果我提供一个到这些脚本的绝对路径,它工作得很好,但这意味着我的团队成员必须修改它以适应他们的机器。不是最优解。

所以,我的问题是:1。测试环境使用src/main/resources和src/test/resources位置作为类路径,而主环境只使用src/main/resources作为类路径,这是真的吗?2.我如何解决这个挑战?

共有1个答案

宓茂才
2023-03-14

是否测试环境同时使用src/main/resourcessrc/test/resources位置作为类路径,而主环境只使用src/main/resources作为类路径?

是的。这是真的。在Maven和Gradletest中,类路径继承自main,反之亦然。这意味着在测试执行期间,src/main/javasrc/main/resources中的类和资源是可用的,但是主代码库不能访问src/test/javasrc/test/resources。还要注意,测试类和资源是不可传递的,也就是说,它们在依赖的项目中不可用。

我如何解决这个挑战?

嗯,有很多解决办法:

  1. 将资源放在src/main(显然)
  2. 将您在这两个地方需要的资源提取到一个单独的模块中并依赖于它。
  3. 使用maven-resources-plugin从其他位置复制文件。
 类似资料:
  • 我有一个目录结构如下的maven模块,我想在中获取的路径 我使用进行了尝试,但它给出了一个空值。 无法获取资源的路径

  • 我的XML文件位于src/main/resources目录下。我的spring代码看起来像 运行此代码时,我得到以下异常:- java.io.FileNotFoundException:类路径资源[xml1.xml]无法解析为绝对文件路径,因为它不驻留在文件系统中:jar:file:/users/user/documents/project/target/bde-0.0.1-snapshot.ja

  • 我为每个生成环境都有一个自定义属性文件夹。我已经为它定义了配置文件并添加了不同的文件夹。它们会被正确地捡起来。但是,src/main/resources中的资源没有被拾取。如果netbeans 8有什么不同的话,我会使用它。我的问题是一旦激活了不同的概要文件,是否需要在概要文件中重新指定主要资源或测试资源?多谢了。 我正在使用Maven开发一个java web项目。有一些web服务的xml文件(h

  • 如果有一种方法可以在javadoc中放置指向驻留在src/main/资源或src/test/资源中的标准资源文件的链接,以便另一个编码器可以快速导航到IntelliJ中的资源文件(在这种情况下是JSON文件),我会发现它非常有用。 这些文件在单元测试中使用,需要在模式更改时经常修改。 这里的答案是Javadoc中指向文本文件(资源)的链接没有帮助,因为绝对路径太脆弱。 有没有和@用资源看一样的方法

  • 我对这样的junit测试有问题。出于某种原因,spring上下文文件只有放在maven项目的src/main/resources文件夹中才能工作。Intellij没有给我任何警告,但是来自mvn和ide炸弹的junit测试运行器都没有给我任何警告。 这两种情况下的代码和输出如下: 为什么在测试上下文类路径中找不到该文件?

  • 我在我的maven项目中的src/main/资源下放置了一个文件,文件名只是temp.txt. 当我试图打开文件时: 我得到一个错误: src/main/资源下的所有文件都放在maven下类路径的根文件夹中。那么为什么程序不能在这里找到文件呢?