Как получить доступ к тестовым ресурсам?
у меня есть файл data.xml на src/test/resources/.
как я могу прочитать этот файл в новый FileReader в моем тесте data.scala на src/test/scala/?
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/resourcestotarget/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")