Існують відмінності та обмеження у варіантах, пропонованих @Steve C та @ ashosborne1. Вони повинні бути визначені, я вважаю.
Коли ми можемо використовувати File resourcesDirectory = new File("src/test/resources");
:?
- 1 Коли тести будуть проводитися тільки через Maven, але не через IDE.
- 2.1 Коли тести будуть проводитися через Maven або
- 2.2 через IDE, і лише один проект імпортується в IDE. (Я використовую "імпортний" термін, тому що він використовується в IntelliJ IDEA. Я думаю, що користувачі eclipse також імпортують свій проект Maven). Це спрацює, тому що робоча директорія, коли ви запускаєте тести через IDE, така сама, як і ваш проект.
- 3.1 Коли тести будуть проводитися через Maven або
- 3.2 через IDE, і більше ID проектів імпортується в IDE (коли ви не студент, ви зазвичай імпортуєте кілька проектів) І перед тим, як запустити тести через IDE, ви вручну налаштовуєте робочий каталог для своїх тестів. Цей робочий каталог повинен посилатися на ваш імпортований проект, який містить тести. За замовчуванням робочий каталог усіх проектів, імпортованих у IDE, є лише одним. Можливо, це обмеження
IntelliJ IDEA
лише, але я думаю, що всі ІДЕ працюють так. І ця конфігурація, яку треба робити вручну, зовсім не є хорошою. Працюючи з декількома тестами, що існують у різних проектах Maven, але імпортовані в один великий проект “IDE”, змушують нас пам’ятати про це і не дозволяють розслабитися та отримати задоволення від вашої роботи.
Рішення, пропоноване @ ashosborne1 (особисто я віддаю перевагу цьому), вимагає 2 додаткових вимог, які необхідно виконати перед запуском тестів. Ось перелік етапів використання цього рішення:
Створіть тестову папку ("teva") та файл ("readme") всередині "src / test / ресурси /":
src / тест / ресурси / teva / readme
Файл повинен бути створений у тестовій папці, інакше він не працюватиме. Мейвен ігнорує порожні папки.
Принаймні один раз створити проект через mvn clean install
. Він також запустить тести. Можливо, буде достатньо запустити лише ваш тестовий клас / метод через maven, не будуючи цілого проекту. В результаті ваші тестові ресурси будуть скопійовані в тестові класи, ось такий шлях:target/test-classes/teva/readme
Після цього ви можете отримати доступ до папки за допомогою коду, який уже запропонував @ ashosborne1 (Вибачте, що я не зміг правильно відредагувати цей код у цьому списку елементів):
public static final String TEVA_FOLDER = "teva"; ...
URL tevaUrl = YourTest.class.getClassLoader().getResource(TEVA_FOLDER);
String tevaTestFolder = new File(tevaUrl.toURI()).getAbsolutePath();
Тепер ви можете запустити свій тест через IDE стільки разів, скільки захочете. Поки ви не запустите mvn чистим. Це випаде цільову папку.
Створення файлу всередині тестової папки та запуску програми Maven вперше, перш ніж запускати тести через IDE, необхідні кроки. Без цих кроків, якщо ви просто у вашій IDE створюєте тестові ресурси, потім пишете тест і запускаєте його лише через IDE, ви отримаєте помилку. Запуск тестів через mvn копіює тестові ресурси в target / test-класи / teva / readme, і вони стають доступними для завантажувача класів.
Ви можете запитати, навіщо мені потрібно імпортувати більше одного проекту Maven в IDE і чому так багато складних речей? Для мене одна з головних мотивацій: тримати файли, пов'язані з IDA, далеко від коду. Спочатку я створюю новий проект у своєму IDE. Це підроблений проект, який є лише власником файлів, пов'язаних з IDE. Потім я імпортую вже існуючі проекти Maven. Я змушую ці імпортовані проекти зберігати файли IDEA лише в моєму первісному підробленому проекті. Як результат, я не бачу серед коду файлів, пов'язаних з IDE. SVN не повинен їх бачити (не пропонуйте налаштувати svn / git на ігнорування таких файлів, будь ласка). Також це дуже зручно.