Как получить доступ к тестовым ресурсам? - PullRequest
129 голосов
/ 13 марта 2011

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

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

Ответы [ 5 ]

188 голосов
/ 13 марта 2011

Ресурсы предназначены для доступа с использованием специальных методов стиля 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, поэтому вы можете делать с ним все, что захотите, например, читать содержимое и использовать его для тестовых данных.

Существуют и другие способы получения ресурса (например, в виде потока). Для получения дополнительной информации посмотрите методы getResource в Java Docs: Class .

22 голосов
/ 13 августа 2016

Другая альтернатива (особенно если вам нужен доступ к ресурсу как File);это получить его путь через:

val path = getClass.getResource("/testData.txt").getPath
val file = new File(path)

, как было указано в Scala получить путь к файлу файла в папке ресурсов

22 голосов
/ 10 августа 2011

sbt копирует файлы из src/test/resources в target/scala-[scalaVersion]/test-classes.

Вы можете получить доступ к ресурсам в своих тестах следующим образом:

Source.fromURL(getClass.getResource("/testData.txt"))

Предполагается, что testData.txt находился непосредственно в папке src/test/resources. Добавьте любые подкаталоги, в противном случае.

0 голосов
/ 17 мая 2017

А в случаях, когда getClass.getResource не работает (не знаю и не волнует, когда и почему именно), com.google.common.io.Resources.getResource из Google Guava обычно работает

testCompile "com.google.guava:guava:18.0"
0 голосов
/ 11 октября 2013

Чтобы узнать, где вы находитесь в файловой системе во время теста, вы можете сделать что-то подобное в фиктивном тесте:

 import scala.collection.JavaConversions._
  for(file <- new File(".").listFiles ){
   println(file.getAbsolutePath)
  }

Затем, когда вы знаете свой путь, в своем тесте вы можете использовать его как:

new File("./src/test/resources/yourfile.xml")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...