Я знаю, что могу загрузить файл из src / test / resources с помощью:
getClass().getResource("somefile").getFile()
Но как я могу получить полный путь к SRC / тест / ресурсы каталога , то есть я не хочу , чтобы загрузить файл, я просто хочу знать путь каталога?
org.junit.rules.TemporaryFolder
все время ... но ... чтобы скопировать из test / resources, вам нужно знать его путь!Ответы:
Попробуйте поработать с
ClassLoader
классом:ClassLoader
Отвечает за загрузку в классах. Каждый класс имеет ссылку наClassLoader
. Этот код возвращаетFile
из каталога ресурсов. ОбращениеgetAbsolutePath()
к нему возвращает его абсолютPath
.Javadoc для
ClassLoader
: http://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.htmlисточник
Вам не нужно связываться с загрузчиками классов. На самом деле это плохая привычка, потому что ресурсы загрузчика классов не являются объектами java.io.File, когда они находятся в архиве jar.
Maven автоматически устанавливает текущий рабочий каталог перед запуском тестов, поэтому вы можете просто использовать:
resourcesDirectory.getAbsolutePath()
вернет правильное значение, если это то, что вам действительно нужно.Я рекомендую создать
src/test/data
каталог, если вы хотите, чтобы ваши тесты обращались к данным через файловую систему. Это проясняет, что вы делаете.источник
Я бы просто использовал
Path
из Java 7С иголочки!
источник
Paths.get(...)
предполагает (для меня в любом случае), что это не будет.File.separator
константу для построения строки, которая будет использоваться в качестве путиnew File("src/test/resources")
делает правильные вещи на всех платформах.Path resourceDirectory = Paths.get("src","test","resources");
?Paths.get("src", "test", "resources")
иPaths.get("src/test/resources")
отлично работает на Windows 10 для меня. Что я делаю не так? =)Если это весенний проект, мы можем использовать приведенный ниже код для получения файлов из папки src / test / resource .
источник
У меня есть проект Maven3 с использованием JUnit 4.12 и Java8. Чтобы получить путь к файлу с именем
myxml.xml
вsrc/test/resources
, я делаю это в тестовом примере:Протестировано на Ubuntu 14.04 с IntelliJ IDE. Ссылка здесь .
источник
Все содержимое в
src/test/resources
копируется вtarget/test-classes
папку. Таким образом, чтобы получить файл из тестовых ресурсов во время сборки maven, вы должны загрузить его изtest-classes
папки, например так:Сломать:
getClass().getProtectionDomain().getCodeSource().getLocation().toURI()
- дать вам URI дляtarget/test-classes
.resolve(Paths.get("somefile"))
- разрешаетsomeFile
вtarget/test-classes
папку.Оригинальный ответ взят из этого
источник
Существуют различия и ограничения в опциях, предлагаемых @Steve C и @ ashosborne1. Они должны быть указаны, я считаю.
Когда мы можем можно использовать:
File resourcesDirectory = new File("src/test/resources");
?IntelliJ IDEA
только, но я думаю, что все IDE работают так. И эта конфигурация, которую необходимо выполнить вручную, совсем не годится. Работа с несколькими тестами, существующими в разных проектах maven, но импортированными в один большой проект «IDE», заставляет нас помнить об этом и не дает расслабляться и получать удовольствие от вашей работы.Решение, предлагаемое @ ashosborne1 (лично я предпочитаю это), требует 2 дополнительных требования, которые должны быть выполнены перед выполнением тестов. Вот список шагов, чтобы использовать это решение:
Создайте тестовую папку («teva») и файл («readme») внутри «src / test / resources /»:
SRC / тест / ресурсы / Teva / ридми
Файл должен быть создан в тестовой папке, иначе он не будет работать. Maven игнорирует пустые папки.
Хотя бы один раз собрать проект через
mvn clean install
. Он также будет запускать тесты. Этого может быть достаточно для запуска только вашего тестового класса / метода через maven без создания всего проекта. В результате ваши тестовые ресурсы будут скопированы в тестовые классы, вот путь:target/test-classes/teva/readme
После этого вы можете получить доступ к папке с помощью кода, уже предложенного @ ashosborne1 (извините, я не смог правильно отредактировать этот код внутри этого списка элементов):
Теперь вы можете запускать тест через IDE столько раз, сколько захотите. Пока вы не запустите mvn clean. Это удалит целевую папку.
Создание файла внутри тестовой папки и запуск maven в первый раз, прежде чем запускать тесты через IDE, являются необходимыми шагами. Без этих шагов, если вы просто в своей среде IDE создаете тестовые ресурсы, а затем пишете test и запускаете его только через IDE, вы получите ошибку. Запуск тестов через mvn копирует тестовые ресурсы в target / test-classes / teva / readme, и они становятся доступными для загрузчика классов.
Вы можете спросить: зачем мне импортировать более одного проекта maven в IDE и почему так много сложных вещей? Для меня одна из главных причин: держать связанные с IDA файлы вдали от кода. Сначала я создаю новый проект в моей IDE. Это фальшивый проект, который просто содержит файлы, связанные с IDE. Затем я импортирую уже существующие проекты Maven. Я заставляю эти импортированные проекты сохранять файлы IDEA только в моем исходном поддельном проекте. В результате я не вижу связанных с IDE файлов среди кода. SVN не должен их видеть (не предлагайте настраивать svn / git, чтобы игнорировать такие файлы, пожалуйста). И это просто очень удобно.
источник
.gitignore
? Также похоже, что IDEA автоматически запускает Maven при запуске тестов (и по умолчанию устанавливает правильный рабочий каталог$MODULE_DIR$
). Таким образом, нет необходимости запускатьmvn test
вручную до этого, все прекрасно работает как с Maven, так и с IDEA только с"src/test/resources/somefile.txt"
.Самое простое и чистое решение я использует, пусть имя тестового класса
TestQuery1
и естьresources
каталог вtest
папке следующим образом :Чтобы получить URI
TestQuery1
do:Чтобы получить URI одного из файлов
TestQuery1
, выполните:источник
Вы не можете использовать файл из папки ресурсов для тестов в общем случае. Причина в том, что файлы ресурсов в папке ресурсов хранятся в банке. Таким образом, у них нет реального пути в файловой системе.
Наиболее простым решением может быть:
TemporaryFolder
fromJUnit
может использоваться для создания временных файлов и удаления их после завершения теста. Классы изguava
библиотеки используются для копирования папки ресурса формы файла.Обратите внимание, что если мы используем подпапку в папке ресурсов, например
good
, нам не нужно добавлять ведущие/
к пути к ресурсу.источник
Используйте следующее, чтобы внедрить Hibernate с Spring в свои модульные тесты:
Если у вас нет
hibernate.cfg.xml
подарка в вашейsrc/test/resources
папке, он автоматически вернется к тому, что находится в вашейsrc/main/resources
папке.источник
Используйте .getAbsolutePath () для вашего объекта File.
источник
getFile()
возвращает экземпляр файла. Он говорит, чтоgetAbsolutePath()
используется на экземпляре объекта File.С помощью Spring вы можете легко прочитать его из папки ресурсов (либо main / resources, либо test / resources):
Например, создайте файл:
test/resources/subfolder/sample.json
источник
источник