2015-12-01 2 views
2

Я пишу тест с использованием системы Groovy Spock, системы IntelliJ и Bazel. Цель состоит в том, чтобы прочитать данные теста из LamborghiniAventador.obj, расположенные в том же каталоге, что и тестовый файл, Model3dImporterSpec.groovy.Чтение из файла в том же каталоге

Я получаю java.io.FileNotFoundException.

def "reading from test file in same directory"() { 
    given: "some stuff" 
    //do some stuff here 

    when: "reading from test file" 
    def file = Paths.get("LamborghiniAventador.obj").normalize().toFile() 
    def byteArray = getFileAsByteStream(file.getAbsolutePath()) 

    then: "file should be read and byte array should not be null" 
    byteArray != null;   
} 

private static byte[] getFileAsByteStream(String pathToFile) { 
    return new File(pathToFile).text.getBytes() 
} 

Путь к моему файлу при поиске в командной строке: ~/Dev/Master/src/test/java/com/censored/api/editor/model3dparsers/LamborghiniAventador.obj

Я могу успешно считан из файла, сидя на моем рабочем столе, но как только я передислоцировать файл в рамках проекта космической вещи остановить за работой.

Directory Tree

Как я прочитал тестовые данные из тестового файла, в котором файл данных испытаний и тестовый файл живут в том же каталоге. Это простая задача в Java (Eclipse). Я посмотрел на тонну других вопросов, связанных с Stackoverflow, но я думаю, что у меня серьезное непонимание. Мне понравилось бы объяснение в дополнение к ответу.

Отредактирован для разъяснения

ответ

2

Я решил свой вопрос с помощью @Opal.

1) Если вы хотите получить доступ к ресурсу в Базеле вам необходимо обновить файл сборки путем добавления в массиве ресурсов:

resources = ["LamborghiniAventador.obj"], 

2) def foo = getClass().getResourceAsStream('LamborghiniAventador.obj') как предложено @Opal работал для меня, как только я сделал изменение 1). Таким образом, приведенный выше код теперь:

def "reading a file in goovy."() { 
    when: "reading file from same directory" 
    System.out.println("Going to read from a file in same directory") 
    def foo = getClass().getResourceAsStream('LamborghiniAventador.obj') 
    def byteArray = foo.getBytes() 
    then: "file should be read and byte array should not be null" 
    byteArray != null; 
} 
+1

Помните, что вы принимаете свой собственный ответ. – Opal

+0

не в течение двух дней после публикации. Будут завтра :) –

+0

Ах, конечно. Всегда забывайте об этом. – Opal

2

Предполагая, что спецификации Model3dImporterSpec.groovy находится в:

src/test/groovy/org/whatever 

LamborghiniAventador.obj файла должны быть расположены в:

src/test/resources/org/whatever 

Почему? Файлы ресурсов должны храниться в том же каталоге, что и исходные файлы.

Затем загрузить использование файла:

getClass().classLoader.getResourceAsStream('LamborghiniAventador.obj') 
+0

Если это все еще работает, если файл спецификации и файл тестовых данных находятся в одном и том же каталоге? –

+0

Насколько я знаю, это должно сработать. – Opal

+0

мой тестовый файл находится в test/java/com/censor/api/editor/model3dparsers/Model3dImporterSpec.groovy, и файл данных теперь находится в test/resources/com/censor/api/editor/model3dparsers/LamborghiniAventador.obj и до сих пор нет удачи. Когда я конвертирую полученный InputStream, который возвращается из вашей строки кода в байт [], он имеет значение null, и я получаю исключение нулевого указателя. Код здесь: def is = getClass(). ClassLoader.getResourceAsStream ('LamborghiniAventador.obj') def byteArray = is.getBytes() –

Смежные вопросы