Как получить доступ к тестовым ресурсам?


у меня есть файл data.xml на src/test/resources/.

как я могу прочитать этот файл в новый FileReader в моем тесте data.scala на src/test/scala/?

5 117

5 ответов:

ресурсы предназначены для доступа с помощью специального 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 to 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 гуава обычно делает

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")