我在data.xml
中有一个文件src/test/resources/
。
如何在FileReader
的测试data.scala
中将该文件读入新的src/test/scala/
?
答案 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)
中指出的那样
答案 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")