Проблема с классом, использующая JUnit с Eclipse и Maven
В тесте JUnit я использую этот код для загрузки в тестовом файле конфигурации:
InputStream configFile = getClass().getResourceAsStream("config.xml");
Когда я запускаю тест через eclipse, он требует, чтобы файл xml находился в том же каталоге, что и тестовый файл.
Когда я создаю проект с помощью maven, он требует, чтобы xml находился в src/test/resources
, поэтому он копируется в target/test-classes
.
Как я могу заставить их работать только с одним файлом?
Ответы
Ответ 1
Поместите файл config.xml в src/test/resources и добавьте src/test/resources в качестве исходной папки в Eclipse.
Другая проблема заключается в том, как getResourceAsStream("config.xml")
работает с пакетами. Если класс, вызывающий это, находится в пакете com.mycompany.whatever
, тогда getResourceAsStream
также ожидает, что config.xml будет в том же пути. Тем не менее, это тот же путь в пути к классам, а не в файловой системе. Вы можете поместить файл в ту же структуру каталогов в src/test/resources - src/test/resources/com/mycompany/whatever/config.xml - или вы можете добавить ведущий "/" к пути - это делает getResourceAsStream
загрузите файл из базы pathpath - поэтому, если вы измените его на getResourceAsStream("/config.xml")
, вы можете просто поместить его в файл src/test/resources/config.xml
Ответ 2
Попробуйте добавить каталог src/test/resources/
в качестве исходной папки в проекте Eclipse. Таким образом, это должно быть на пути к классу, когда Eclipse пытается запустить ваш unit test.
Ответ 3
Я знаю, что это старый вопрос, но я наткнулся на него и счел странным, что ни один из вышеупомянутых ответов не упоминает 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.
Ответ 4
если вам просто нужно это во время тестирования, вы можете загрузить его через файловую систему, здесь должен быть одинаковый контекст:
new FileInputStream(new File("target/test-classes/your.file"));
не очень, но работает