У меня есть файл 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.
sbt копирует файлы с src/test/resources
в target/scala-[scalaVersion]/test-classes
.
Вы можете получить доступ к ресурсам в своих тестах следующим образом:
Source.fromURL(getClass.getResource("/testData.txt"))
Предполагается, что testData.txt
находится непосредственно под папкой src/test/resources
. Добавьте любые подкаталоги, в противном случае.
Другая альтернатива (особенно если вам нужен доступ к ресурсу как File
); это получить его путь через:
val path = getClass.getResource("/testData.txt").getPath
val file = new File(path)
как указано в Scala получить путь к файлу файла в папке с ресурсами
И в тех случаях, когда getClass.getResource
не работает (не знаю и не заботится, когда и почему именно), com.google.common.io.Resources.getResource
из Google Guava обычно делает
testCompile "com.google.guava:guava:18.0"
Чтобы узнать, где вы находитесь в файловой системе во время теста, вы можете сделать что-то подобное в фиктивном тесте:
import scala.collection.JavaConversions._
for(file <- new File(".").listFiles ){
println(file.getAbsolutePath)
}
Затем, когда вы знаете свой путь, в своем тесте вы можете использовать его как:
new File("./src/test/resources/yourfile.xml")