【问题标题】:Maven test/resources directory and integration testMaven 测试/资源目录和集成测试
【发布时间】:2011-01-05 17:09:59
【问题描述】:

希望应该是一个简单的问题...

我有一个包含默认目录结构的集成测试模块:

src
|-main
|-test
  |-java
  |-resources

然后在我的资源目录中,我有一个 xxxx.xml 和 xxxx.xsd 文件,我需要将这些文件加载​​到我的测试中:

@Test
public void should_do_some_stuff_with_xml_and_xsd() // not actual test name
{
   File xmlFile = new File("xxxx.xml");
   File xsdFile = new File("xxxx.xsd");
   ...
}

尝试加载文件总是失败,现在我认为是我需要给它一个从项目根目录或其他东西的相对路径。我需要这个测试在我的 IDE 外部运行,这样我就可以在构建服务器上运行测试......

所以我的问题是,如何定位这些文件?

【问题讨论】:

    标签: maven-2 maven integration-testing


    【解决方案1】:

    类路径机制不适用于文件。相对文件路径从当前目录解析,而不是从类路径元素解析。

    所以你可以这样做

    File xmlFile = new File("target/test-classes/xxxx.xml");
    File xsdFile = new File("target/test-classes/xxxx.xsd");
    

    但是,更简洁的解决方案是使用 InputStreams 而不是文件。几乎所有支持File 参数的库也支持InputStream 参数。这样您就可以使用ClassLoader 魔法,而无需手动指定任何路径:

    ClassLoader cldr = Thread.currentThread().getContextClassLoader();
    InputStream xmlStream = cldr.getResourceAsStream("xxxx.xml");
    InputStream xsdStream = cldr.getResourceAsStream("xxxx.xsd");
    

    参考:

    【讨论】:

    • 如果你真的只想要文件而不是输入流,你可以这样做:File xmlFile = new File(Thread.currentThread().getContextClassLoader().getResource("xxxx.xml"));
    猜你喜欢
    • 2012-03-15
    • 2022-12-22
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多