Подтвердить что ты не робот

Junit + getResourceAsStream Возвращает нуль

Не знаю, как это возможно. Я перечитываю getResourceAsStream и всегда возвращает null.

InputStream source = this.getClass().getResourceAsStream("test.xml");

Рядом с test.java в Finder (с использованием OS X и Eclipse) находится test.xml

Я могу открыть его в TextWrangler и просмотреть его как существующий с данными внутри.

Это тест Junit, если он имеет какое-либо значение. Я пошел и посмотрел на существующие тесты Junit в нашей системе, и я использую его точно так же, как рабочий пример (как там, где находится файл, и сам код).

Какая небольшая разница может быть препятствием, я предполагаю, что getClass() вернет правильный путь?

Спасибо!

4b9b3361

Ответ 1

getResourceAsStream() использует CLASSPATH, и как таковой он будет загружаться из всех ваших классов, а не из ваших исходных файлов.

Я подозреваю, что вам нужно скопировать XML в тот же каталог, что и ваш .class файл.

Ответ 2

Он не находит ресурс в пути к классам. Если вы используете junit и maven, убедитесь, что ресурсы скопированы в целевые/тестовые классы, добавив директиву <include> в разделе <testResource>

Вы также можете узнать расположение своего класса в файловой системе, используя

this.getClass().getResource(".")

и проверьте, есть ли ресурс

Ответ 3

У меня всегда есть проблема с этим методом. Вот 2 ссылки, которые могут быть полезны:

Я всегда экспериментирую с добавлением "/" в начале или "./".

Из моего опыта лучший метод использует FileInputStream. Следует помнить только одно (при использовании FileInputStream с Eclipse), с настройками по умолчанию, в вашем рабочем каталоге установлен корень проектов. Вы всегда можете проверить, где находится ваш текущий каталог (и какие относительные пути вам нужны), используя этот фрагмент кода.

Ответ 4

Если вы используете Maven, добавьте эту часть в свой pom.xml

<build>
    <testResources>
        <testResource>
            <directory>${project.basedir}/src/test/resources</directory>
        </testResource>
    </testResources>
</build>

Ваш test.xml и другие файлы ресурсов должны быть расположены в src/test/resources

Ответ 5

Предполагая, что test.xml находится прямо под вашей корневой исходной папкой test, выполните следующие действия: -

InputStream source = this.getClass().getClassLoader().getResourceAsStream("test.xml");

Ответ 6

Попробуйте MyClass.getResourceAsStream().

Также попробуйте поместить test.xml в свой путь к классам. Например, в веб-проекте Eclipse поместите text.xml в webcontent/WEB-INF/classes

Ответ 7

Из API Java:

http://docs.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html#getSystemResource(java.lang.String)

Найдите ресурс указанного имени из пути поиска, используемого для загрузки классов. Этот метод находит ресурс через загрузчик системного класса

Таким образом, синтаксис будет, например, быть: ClassLoader.getSystemResource( "test.xml" ) ToString();.

Работает как шарм!

Ответ 8

Я потратил много времени на эту проблему, и мне не хватало следующей конфигурации: Щелкните правой кнопкой мыши проект eclipse и выберите Свойства → Путь сборки Java → Источник и отредактируйте строку Включено и добавить *.properties (*.fileExtension)

Ответ 9

У меня была эта проблема с классом Spring. System.class.getResourceAsStream(...) работал в модульных тестах, но не в Tomcat, Thread.currentThread().getContextClassLoader().getResourceAsStream(...) работал в Tomcat, но не в модульных тестах.

Улично я пошел с:

ClassUtils.getDefaultClassLoader()
    .getResourceAsStream("com/example/mail/templates/invoice-past-due.html"))

Я также обнаружил, что, как только я это сделал, мне не нужно было начинать путь с косой черты.

Ответ 10

Вам нужно поместить копию своего ресурсного файла в тестовые ресурсы, в моем примере это файл шрифта:

введите описание изображения здесь

Затем вызовите следующий из теста jUnit:

 public static InputStream getFontAsStream() throws IOException {
        return Thread.currentThread().getContextClassLoader()
                    .getResourceAsStream("fonts/" + "FreeSans.ttf");
    }

Ответ 11

Добавьте папку с вашими файлами ресурсов в исходные папки eclipse. Затем файл должен быть автоматически помещен в каталог bin.