Проблема пути к классу с помощью JUnit и с Eclipse и со Знатоком

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

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

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

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

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

12
задан Sébastien Le Callonnec 8 December 2011 в 22:26
поделиться

3 ответа

Поместите файл 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

16
ответ дан 2 December 2019 в 07:20
поделиться

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

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

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

0
ответ дан 2 December 2019 в 07:20
поделиться

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

4
ответ дан 2 December 2019 в 07:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: