希望应该是一个简单的问题......
我有一个集成测试模块,其中包含默认目录结构:
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外部运行,这样我就可以在构建服务器上运行测试...
所以我的问题是,如何定位这些文件?
答案 0 :(得分:11)
类路径机制不适用于文件。相对文件路径从当前目录解析,而不是从类路径元素解析。
所以你可以做到
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");
<强>参考:强>
ClassLoader
(javadoc)InputStream
(javadoc)