Проблемы с classpath при использовании JUnit с Eclipse и Maven - PullRequest
12 голосов
/ 19 мая 2010

В тесте JUnit я использую этот код для загрузки в специфичный для теста файл конфигурации:

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

Когда я запускаю тест через eclipse, требуется, чтобы файл xml находился в том же каталоге, что и файл теста.

Когда я собираю проект с помощью maven, требуется, чтобы xml был в src/test/resources, чтобы он был скопирован в target/test-classes.

Как я могу заставить их работать только с одним файлом?

Ответы [ 4 ]

16 голосов
/ 19 мая 2010

Поместите файл 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 / what / config.xml - либо добавить к пути начальный "/" - это составит getResourceAsStream загрузить файл из базы пути к классам - поэтому, если вы измените его на getResourceAsStream("/config.xml"), вы можете просто поместить файл в src / test / resources / config.xml

4 голосов
/ 19 мая 2010

Попробуйте добавить каталог src/test/resources/ в качестве исходной папки в вашем проекте Eclipse. Таким образом, он должен быть на пути к классам, когда Eclipse пытается запустить ваш модульный тест.

1 голос
/ 17 ноября 2011

Я знаю, что это старый вопрос, но я наткнулся на него и нашел странным, что ни один из приведенных выше ответов не упоминает плагин Maven Eclipse. Запустите mvn eclipse:eclipse, и он добавит src / main / resources и src / test / resources и т. Д. К «Пути сборки Java» в Eclipse для вас.

У него есть куча вещей, которые вы можете настроить оттуда (если вам нужно отклониться от соглашений, если нет, то он уже готов к работе):

В общем, если вы используете Maven, не изменяйте вещи вручную в Eclipse. Никогда не фиксируйте свой .classpath / .project и вместо этого просто используйте плагин Maven Eclipse для генерации этих файлов (или их обновления). Таким образом, у вас есть ОДИН источник конфигурации для вашего проекта, MAVEN, а не ручные настройки, которые вы в конечном итоге должны сказать другим использовать и запомнить себя и так далее. Если это проект Maven: выведите его из-под контроля исходного кода, запустите «mvn eclipse: eclipse», и он должен работать в Eclipse, если он не требует работы POM.

0 голосов
/ 19 мая 2010

если вам просто нужно это во время тестирования, вы можете загрузить его через файловую систему, контекст здесь должен быть одинаковым для обоих случаев:

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

не красиво, но работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...