【问题标题】:How do I make my JUnit tests access resources from main?如何让我的 JUnit 测试从 main 访问资源?
【发布时间】:2017-07-05 05:55:51
【问题描述】:

我正在使用以下调用来获取流,以便我可以找到我的一些资源的文件名。

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

当我正常运行我的代码时它工作正常,如果我将我的资源复制到我的测试文件夹中它也工作正常。

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

【问题讨论】:

  • 我找到了一个 Maven 特定的解决方法。看看这个:stackoverflow.com/a/6541151/451518
  • @defaultlocale 谢谢。不过,我不确定我是否理解该评论。我已经更新了这个问题,以明确我只想通过 IntelliJ IDEA 正常运行测试。 (虽然我想我以后也会希望他们与 Maven 一起工作。)

标签: java maven intellij-idea junit


【解决方案1】:

src/test/resources 中的所有内容都被maven-resources-plugin 复制到target/test-classes。然后,您在src/main/resources 中的所有内容都会进入target/classes。然后,maven-surefire-pluginconfigures 类路径依次为:target/test-classes 第一,target/classes 下一个。

多亏了这一点,如果您的资源同时保留在 src/main/resourcessrc/test/resources 中,其“测试”版本将在单元测试中加载。

如果它只存在于src/main/resources中,它将在单元测试中可用,无需任何进一步的操作。

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

【讨论】:

  • 感谢叶戈尔的回复。你所说的一切似乎都是真的,但由于某种原因它仍然不起作用。不过我可能会遗漏一些愚蠢的东西,所以我会继续寻找。
  • 看到这条评论:stackoverflow.com/questions/3923129/…。似乎如果测试文件夹中有类文件,那么它不会列出我感兴趣的非类文件。如果我将非类文件放在他们自己的文件夹中,那么它会选择它们。有点奇怪。
猜你喜欢
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
  • 2012-10-05
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
相关资源
最近更新 更多