Модульное тестирование с ресурсами, загруженными с помощью ClassLoader и Maven Surefire - PullRequest
0 голосов
/ 29 октября 2018

У меня есть проект JavaFX, который загружает файлы FXML с помощью getClassLoader (). GetResource, например:

Main.class.getClassLoader().getResource("fxml/App.fxml"). 

Основной код работает нормально, но когда я запускаю тесты с плагином Maven Surefire, у меня появляется эта ошибка:

java.lang.IllegalStateException: Location is not set.
javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2459)
javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:2435)

После дальнейшего изучения я обнаружил, что при вызове getClassLoader (). GetResource () при выполнении теста путь, который он пытается найти, находится в папке "target / test-classes", тогда как ресурсы находятся в "target / classes" папка. Как мне решить эту проблему? Мой проект следует структуре по умолчанию Maven, если это уместно.

Редактировать: добавлена ​​строка кода, выполняющая загрузку ресурса

1 Ответ

0 голосов
/ 29 октября 2018

При запуске тестов в Maven, classpath состоит из target/classes и target/test-classes

target / classes используется для хранения скомпилированных классов и ресурсов (в разделе src / main / java, src / main / resources) target / test-classes используется для хранения скомпилированных тестовых классов и ресурсов тестирования (соответственно в src / test / java и src / test / resources)

Вы не показываете код, который выполняет getClassLoader().getResource(), и наиболее важным является параметр этого getResource - как он решается во время выполнения (во время теста), поэтому трудно сказать больше, но, вероятно, проблема является то, что этот параметр не указан правильно.

Например, если его файл src/main/resources/sample.xml, он должен быть разрешен как:

getClassLoader().getResource("/sample.xml")
...