Java 我如何让我的JUnit测试从main访问资源?

Java 我如何让我的JUnit测试从main访问资源?,java,maven,intellij-idea,junit,Java,Maven,Intellij Idea,Junit,我使用下面的调用来获取流,这样我就可以找到我的一些资源的文件名 Thread.currentThread().getContextClassLoader().getResourceAsStream(...) 当我正常运行我的代码时,它可以正常工作,如果我将资源复制到测试文件夹中,它也可以正常工作 Thread.currentThread().getContextClassLoader().getResourceAsStream(...) 如何避免这种重复,并使我的测试(在运行IDEA时)使用

我使用下面的调用来获取流,这样我就可以找到我的一些资源的文件名

Thread.currentThread().getContextClassLoader().getResourceAsStream(...)
当我正常运行我的代码时,它可以正常工作,如果我将资源复制到测试文件夹中,它也可以正常工作

Thread.currentThread().getContextClassLoader().getResourceAsStream(...)

如何避免这种重复,并使我的测试(在运行IDEA时)使用main中的资源?

您在
src/test/resources
中拥有的所有内容都被复制到
目标/测试类中。然后,您在
src/main/resources
中拥有的所有内容都进入
target/classes
。然后,按照以下顺序选择类路径:
target/testclasses
第一个和
target/classes
下一个

Thread.currentThread().getContextClassLoader().getResourceAsStream(...)
因此,如果您的资源同时位于
src/main/resources
src/test/resources
中,那么它的“测试”版本将加载到单元测试中

Thread.currentThread().getContextClassLoader().getResourceAsStream(...)
如果它只存在于
src/main/resources
中,那么它将在单元测试中可用,无需任何进一步的操作

Thread.currentThread().getContextClassLoader().getResourceAsStream(...)

如果它只存在于
src/test/resources
中,那么您将只能在单元测试期间访问它。

我找到了一个特定于maven的解决方法。请查看:@defaultlocale谢谢。但我不确定我是否理解这一评论。我已经更新了这个问题,以明确我只想通过IntelliJ IDEA正常运行测试。(虽然我想我以后也会希望他们和Maven一起工作。)谢谢你的回复Yegor。你所说的一切似乎都是真的,但出于某种原因,它仍然不起作用。我可能遗漏了一些愚蠢的东西,所以我会继续查找。遇到以下评论:。似乎如果测试文件夹中有类文件,那么它不会列出我感兴趣的非类文件。如果我把非类文件放在它们自己的文件夹中,它就会把它们捡起来。有点奇怪。
Thread.currentThread().getContextClassLoader().getResourceAsStream(...)