У мене файл data.xml
в src/test/resources/
.
Як я можу прочитати цей файл в новий FileReader
в моєму тесті data.scala
в src/test/scala/
?
У мене файл data.xml
в src/test/resources/
.
Як я можу прочитати цей файл в новий FileReader
в моєму тесті data.scala
в src/test/scala/
?
Відповіді:
До ресурсів потрібно звернутися за допомогою спеціальних getResource
методів стилю, які надає Java. З огляду на ваш приклад data.xml
перебування $SBT_PROJECT_HOME/src/test/resources/
, ви можете отримати доступ до нього в тесті так:
import scala.io.Source
// The string argument given to getResource is a path relative to
// the resources directory.
val source = Source.fromURL(getClass.getResource("/data.xml"))
Звичайно, source
це просто звичайний об'єкт Scala IO, щоб ви могли з ним робити все, що завгодно, як-от читати вміст і використовувати його для тестових даних.
Існують і інші методи отримання ресурсу (наприклад, як потік). Для отримання додаткової інформації подивіться getResource
методи на Java Docs: Class .
getClassLoader
потрібен. Без нього шлях включає каталог ієрархії класів тестового класу. Щось подібне ~/lighthouse/target/scala-2.12/test-classes/com/mycompany/myapp/module1/utils/blabla/
. Використання getClass.getClassLoader.getResource()
порції com/mycompany/myapp/module1/utils/blabla/
видалено
Інша альтернатива (особливо якщо вам потрібно отримати доступ до ресурсу як File
); це отримати шлях шляхом:
val path = getClass.getResource("/testData.txt").getPath
val file = new File(path)
як було зазначено в Scala отримати шлях до файлу до папки ресурсів
sbt копіює файли з src/test/resources
до target/scala-[scalaVersion]/test-classes
.
Ви можете отримати доступ до ресурсів у своїх тестах наступним чином:
Source.fromURL(getClass.getResource("/testData.txt"))
Він припускає, що це testData.txt
було безпосередньо під папкою src/test/resources
. Інакше додайте підкаталоги.
Щоб знати, де ви знаходитесь у файловій системі під час тестування, ви можете зробити щось подібне в манекені:
import scala.collection.JavaConversions._
for(file <- new File(".").listFiles ){
println(file.getAbsolutePath)
}
Потім, коли ви знаєте свій шлях, у своєму тесті ви можете використовувати його як:
new File("./src/test/resources/yourfile.xml")
src/test/resources
перебувають у тесті, знаходяться в тесті CLASSPATH, тому тести можуть отримати доступ до нього, не знаючи код про структуру каталогу каталогів.
getClassLoader
інструкцію. Результат бувSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))