【问题标题】:Classpath trouble using JUnit with both Eclipse and Maven在 Eclipse 和 Maven 中使用 JUnit 的类路径问题
【发布时间】:2011-02-21 08:57:06
【问题描述】:

在 JUnit 测试中,我使用此代码加载特定于测试的配置文件:

InputStream configFile = getClass().getResourceAsStream("config.xml");

当我通过eclipse运行测试时,它要求xml文件与测试文件在同一目录下。

当我使用 maven 构建项目时,它要求 xml 位于 src/test/resources,以便将其复制到 target/test-classes

我怎样才能让它们都只使用一个文件?

【问题讨论】:

    标签: java eclipse maven-2 junit


    【解决方案1】:

    将 config.xml 文件放在 src/test/resources 中,并将 src/test/resources 添加为 Eclipse 中的源文件夹。

    另一个问题是getResourceAsStream("config.xml") 如何处理包。如果调用它的类在 com.mycompany.whatever 包中,那么 getResourceAsStream 也期望 config.xml 位于同一路径中。但是,这是 classpath 中的相同路径,而不是文件系统。您可以将文件放在 src/test/resources 下的同一目录结构中 - src/test/resources/com/mycompany/whatever/config.xml - 或者您可以在路径中添加前导“/” - 这使得 @987654324 @ 从类路径的基础加载文件 - 所以如果你把它改成 getResourceAsStream("/config.xml") 你可以把文件放在 src/test/resources/config.xml 中

    【讨论】:

    • 就是这样! / 是问题所在。谢谢!
    【解决方案2】:

    尝试将src/test/resources/ 目录作为源文件夹添加到您的Eclipse 项目中。这样,当 Eclipse 尝试运行您的单元测试时,它应该位于类路径中。

    【讨论】:

    • 遗憾的是,这条保存评论花了我一整天的时间才找到。解决了我的测试问题,即资源包在 Maven 中运行良好但在 Eclipse 中运行时失败。谢谢!
    【解决方案3】:

    我知道这是一个老问题,但我偶然发现了它,发现上面的答案都没有提到 Maven Eclipse 插件,这很奇怪。运行mvn eclipse:eclipse,它将为您添加 src/main/resourcessrc/test/resources 等到 Eclipse 中的“Java Build Path”中。

    你也可以从那里配置一堆东西(如果你需要偏离约定,如果你不这样做,那么它已经准备好了):

    一般来说,如果您使用的是 Maven,请不要在 Eclipse 中手动更改内容。永远不要提交您的 .classpath/.project ,而只需使用 Maven Eclipse 插件来生成这些文件(和/或更新它们)。这样一来,您的项目 MAVEN 就有了一个配置源,而不是您最终不得不告诉其他人使用并记住自己的手动设置等等。如果它是一个 Maven 项目:将其从源代码控制中检查出来,运行“mvn eclipse:eclipse”,它应该可以在 Eclipse 中工作,如果你的 POM 不需要工作。

    【讨论】:

      【解决方案4】:

      如果你只是在测试时需要它,你可以通过文件系统加载它,这里的上下文对于两种情况应该是相同的:

      new FileInputStream(new File("target/test-classes/your.file"));
      

      不漂亮,但很管用

      【讨论】:

        猜你喜欢
        • 2011-08-01
        • 2019-03-09
        • 2023-03-25
        • 2015-08-20
        • 1970-01-01
        • 1970-01-01
        • 2013-10-06
        • 1970-01-01
        • 2017-02-20
        相关资源
        最近更新 更多