开发者

Maven test/resources directory and integration test

Hopefully should be a simple question开发者_StackOverflow中文版...

I have an integration test module which contains the default directory structure:

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

Then within my resources directory I have an xxxx.xml and xxxx.xsd file, and I need to load these files in as part of my test:

@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");
   ...
}

It keeps failing trying to load the file, now I presumed it was down to me needing to give it a relative path from the project root or something. I need this test to run externally to my IDE so I can run the tests on the build server when it gets there...

So my question is, how do I target these files?


The classpath mechanism does not work for files. Relative file paths are resolved from the current directory, not from the classpath elements.

So you could just do

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

However, a much cleaner solution would be to work with InputStreams instead of files. Almost every library that supports File parameters also supports InputStream parameters. And that way you can use ClassLoader magic without manually specifying any paths:

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

Reference:

  • Byte Streams (Sun Java Tutorial)
  • ClassLoader (javadoc)
  • InputStream (javadoc)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜