如何访问testing资源?

我在src/test/resources/有一个data.xml文件。

我怎么能读取该文件到我的testingdata.scalasrc/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")