如何访问testing资源?
我在src/test/resources/
有一个data.xml
文件。
我怎么能读取该文件到我的testingdata.scala
在src/test/scala/
新FileReader
?
资源旨在使用Java提供的特殊getResource
样式方法进行访问。 假设您的data.xml
位于$SBT_PROJECT_HOME/src/test/resources/
,您可以像下面这样在一个testing中访问它:
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对象,所以你可以用它来做任何你想做的事情,比如读取内容并将其用于testing数据。
还有其他方法来获取资源(例如作为一个stream)。 有关更多信息,请参阅Java Docs:Class上的getResource
方法。
sbt将文件从src/test/resources
复制到target/scala-[scalaVersion]/test-classes
。
您可以按如下方式访问testing中的资源:
Source.fromURL(getClass.getResource("/testData.txt"))
它假定testData.txt
直接在文件夹src/test/resources
。 添加任何子目录,否则。
另一种select(特别是如果你需要访问资源作为一个File
); 是通过以下方式获取它的path:
val path = getClass.getResource("/testData.txt").getPath val file = new File(path)
正如已经在Scala中指出的那样获取资源文件夹中文件的文件path
在getClass.getResource
不起作用的情况下(不知道什么时候或为什么),来自Google Guava的com.google.common.io.Resources.getResource
通常会
testCompile "com.google.guava:guava:18.0"
要在testing过程中知道你在文件系统中的位置,你可以在一个虚拟testing中做这样的事情:
import scala.collection.JavaConversions._ for(file <- new File(".").listFiles ){ println(file.getAbsolutePath) }
然后,当你知道你的path,在你的testing中,你可以使用它:
new File("./src/test/resources/yourfile.xml")