У меня есть файл 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, так что вы можете делать с ним все, что захотите, например читать содержимое и использовать его для тестовых данных.
Есть и другие методы получения ресурса (например, в виде потока). Для получения дополнительной информации просмотрите getResource
методы в Java Docs: Class .
getClassLoader
в инструкцию. Результат былSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))
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
. В противном случае добавьте подкаталоги.источник
А в случаях, когда
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")
источник
src/test/resources
находятся в CLASSPATH теста, поэтому тесты могут получить к нему доступ без того, чтобы код знал о структуре каталога сборки.