如何访问测试资源?

时间:2011-03-12 22:23:27

标签: scala sbt

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

如何在FileReader的测试data.scala中将该文件读入新的src/test/scala/

5 个答案:

答案 0 :(得分:186)

可以使用Java提供的特殊getResource样式方法访问资源。鉴于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对象,所以你可以随意做任何事情,比如阅读内容并将其用于测试数据。

还有其他方法可以获取资源(例如作为流)。有关详细信息,请查看Java Docs: Class上的getResource方法。

答案 1 :(得分:22)

sbt将文件从src/test/resources复制到target/scala-[scalaVersion]/test-classes

您可以按如下方式访问测试中的资源:

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

它确实假设testData.txt直接位于文件夹src/test/resources下。添加任何子目录,否则。

答案 2 :(得分:20)

另一种选择(特别是如果您需要以File的形式访问资源);是通过以下方式获得它的路径:

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

正如Scala get file path of file in resources folder

中指出的那样

答案 3 :(得分:0)

如果getClass.getResource不起作用(不知道也不关心何时或为何确切),Google Guava的com.google.common.io.Resources.getResource通常会

testCompile "com.google.guava:guava:18.0"

答案 4 :(得分:-4)

要知道在测试期间您在文件系统中的位置,您可以在虚拟测试中执行以下操作:

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

然后,当您知道自己的路径时,在测试中您可以将其用作:

new File("./src/test/resources/yourfile.xml")