2010-05-19 5 views
12

В тесте JUnit Я использую этот код для загрузки в тестовом конкретном файле конфигурации:Classpath Проблемы с использованием JUnit как с Eclipse, и Maven

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

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

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

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

ответ

15

Поместите файл config.xml в src/test/resources и добавьте src/test/resources в качестве исходной папки в Eclipse.

Другая проблема заключается в том, как getResourceAsStream("config.xml") работает с пакетами. Если класс, вызывающий это, находится в пакете com.mycompany.whatever, то getResourceAsStream также ожидает, что config.xml будет в одном пути. Тем не менее, это тот же путь в пути class, а не в файловой системе. Вы можете поместить файл в ту же структуру каталогов в src/test/resources - src/test/resources/com/mycompany/whatever/config.xml - или вы можете добавить ведущий «/» к пути - это делает загрузку getResourceAsStream файл из базы пути к классам - поэтому, если вы измените его на getResourceAsStream("/config.xml"), вы можете просто поместить его в файл src/test/resources/config.xml

+1

Вот и все!Проблема была /. Спасибо! – Steve

4

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

+0

К сожалению, этот единственный сохраненный комментарий занял у меня целый день, чтобы найти. Решила мою проблему тестов, которые заставляют пакеты ресурсов работать в Maven, но не работают при запуске в Eclipse. Благодаря! – davemyron

0

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

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

не очень, но это работает

1

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

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

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

Смежные вопросы