我有一个文件data.xml
在src/test/resources/
。
如何FileReader
在测试data.scala
中将该文件读入新文件src/test/scala/
?
我有一个文件data.xml
在src/test/resources/
。
如何FileReader
在测试data.scala
中将该文件读入新文件src/test/scala/
?
Answers:
使用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 IO对象,因此您可以使用它进行任何操作,例如读取内容并将其用于测试数据。
还有其他获取资源的方法(例如,作为流)。有关更多信息,请查看Java Docs:类getResource
上的方法。
getClassLoader
需要经过确认的Moebius评论。没有它,路径将包含测试类的类层次结构目录。有点像 ~/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中指出的那样,获取资源文件夹中文件的文件路径
要知道测试期间文件系统中的位置,可以在虚拟测试中执行以下操作:
import scala.collection.JavaConversions._
for(file <- new File(".").listFiles ){
println(file.getAbsolutePath)
}
然后,当您知道自己的路径时,可以在测试中将其用作:
new File("./src/test/resources/yourfile.xml")
src/test/resources
位于测试的CLASSPATH中,因此测试无需代码即可了解构建目录结构即可访问它。
getClassLoader
在指令中添加一个。结果是Source.fromURL(getClass.getClassLoader.getResource("simulation.json"))