В тесте JUnit я использую этот код для загрузки в определенном для теста файле конфигурации:
InputStream configFile = getClass().getResourceAsStream("config.xml");
Когда я запускаю тест через затмение, он требует, чтобы XML-файл был в том же каталоге как тестовый файл.
Когда я разрабатываю проект со знатоком, он требует, чтобы xml был в src/test/resources
, так, чтобы это было скопировано в target/test-classes
.
Как я могу сделать их обоих работой со всего одним файлом?
Поместите файл 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 / something / config.xml - или вы можете добавить начальный "/" к пути - это заставит getResourceAsStream
загрузить файл из базы пути к классам - поэтому, если вы измените его на getResourceAsStream ("/ config.xml ")
вы можете просто поместить файл в src / test / resources / config.xml
если он вам нужен только во время тестирования, вы можете загрузить его через файловую систему, контекст здесь должен быть одинаковым для обоих случаев:
new FileInputStream(new File("target/test-classes/your.file"));
не очень красиво, но работает
Попробуйте добавить каталог src/test/resources/
в качестве исходной папки в ваш проект Eclipse. Таким образом, она должна быть в пути класса, когда Eclipse попытается запустить ваш модульный тест.