Maven test / resources каталог и интеграционный тест - PullRequest
2 голосов
/ 05 января 2011

Надеюсь, это должен быть простой вопрос ...

У меня есть модуль тестирования интеграции, который содержит структуру каталогов по умолчанию:

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, чтобы я мог запускать тесты на сервере сборки, когда он туда попадет ...

Итак, мой вопрос: как я нацеливаюсь на эти файлы?

1 Ответ

11 голосов
/ 05 января 2011

Механизм classpath не работает для файлов. Относительные пути к файлам разрешаются из текущего каталога, а не из элементов classpath.

Так что вы можете просто сделать

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");

Справка:

...