【问题标题】:Adding /src/main/resources to Classpath when Running Spring JUnit Tests from Eclipse从 Eclipse 运行 Spring JUnit 测试时将 /src/main/resources 添加到 Classpath
【发布时间】:2012-03-26 19:47:09
【问题描述】:

有没有办法在 Eclipse(特别是我使用 SpringJUnit4ClassRunner)中获取 JUnit 测试以使用来自 src/main/resourcessrc/test/resources 的资源?

Maven 的 surefire 插件可以做到这一点,但从 Eclipse 运行一个特定的单元测试却没有。

我在src/main/resources/spring-config/ 中有大量 Spring 配置,我想“覆盖”两个特定文件。我已经将这些特定于测试的覆盖放在src/test/resources/spring-config/ 中,并且当通过 Maven 运行单元测试时,一切都可以正常工作。当我从 Eclipse 运行 JUnit 测试时,只有测试文件可用,毫无疑问我的上下文无法加载。

更新

当使用通配符时,配置测试上下文的 Spring 类似乎无法从 src/main/resources/ 中找到资源,但如果我明确指定它们,找到它们。

找不到来自src/main/resources/的东西

@ContextConfiguration(locations = {"classpath:/spring-config/*.xml"})

是否src/main/resources/找到指定文件

@ContextConfiguration(locations = {"classpath:/spring-config/*.xml",
                                   "classpath:/spring-config/app-aws.xml"})

【问题讨论】:

  • 只是向任何想回答这个问题的人指出,“有没有办法让 Eclipse/Maven 中的 JUnit 测试使用来自 src/main/resourcessrc/test/resources 的资源?” (并且对 Spring 部分不太感兴趣),请参阅 this answer 了解如何在 Maven 中执行此操作,或者只需在 Eclipse 中的运行配置中添加一个文件夹。

标签: eclipse spring unit-testing maven junit


【解决方案1】:

这实际上是 Spring 的限制,而不是 JUnit。详情请见http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/resources.html#resources-wildcards-in-path-other-stuff

解决方案是将您的 Spring 配置文件放在一个包中,而不是放在根包中。

【讨论】:

  • 如果我使用classpath*:,那么它会使用两组文件,但会同时评估这两组文件,而不是让src/test/resources 版本优先。有没有办法解决这个问题?
  • @Deejay 你真的应该在 src/test 中将你的东西命名为 {something}-test 或类似名称,并在需要时明确引用它们 - 否则你是否指的是原始文件永远不会清楚或测试版
  • @eis 感谢您的想法。 src/test/resources 中的 IMO 资源不需要任何进一步识别为测试资源。此外,由于无法模拟整个配置上下文而增加了复杂性,因为这样我最终会在使用通配符时同时加载文件的测试和非测试版本。
  • 如果你有类似 @runwith("my-configuration.xml") 注释的东西,这在(至少)spring中很常见,通过查看代码是不可能知道是测试还是原始的配置参考。这就是为什么需要(imo)单独的名称。
  • @eis:如果文件名称相同,则测试配置始终覆盖主配置。因此,只需查看src/test/resources/ 即可查看有哪些测试配置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-29
  • 2011-02-24
  • 2017-02-10
  • 2016-05-17
  • 2014-04-01
  • 2020-07-20
相关资源
最近更新 更多