无法访问Scala中相对路径中的文件以获取测试资源

时间:2017-02-27 11:44:56

标签: scala maven scalatest

我已经使用Maven设置了我的SCALA项目,现在我正在编写测试并需要访问资源路径子目录下的文件,如:

src/test/resource/abc/123.sql

现在我正在做以下事情:

val relativepath = "/setup/setup/script/test.sql"
val path = getClass.getResource(relativepath).getPath
println(path)

但这是指向src / main / resource文件夹而不是测试资源,任何人都知道我在这里做错了什么?

1 个答案:

答案 0 :(得分:5)

就像在Java中一样,将资源文件放在src/main/resourcessrc/test/resources下是一种很好的做法,因为Scala通过检索资源文​​件提供了一个很好的API。

考虑到您将test.sql文件放在src/test/resources/setup/setup/script/test.sql下,您可以通过执行以下操作轻松阅读该文件:

Scala 2.12

import scala.io.Source
val relativePath = "setup/setup/script/test.sql"
val sqlFile : Iterator[String] = Source.fromResource(relativePath).getLines

之前的Scala版本

import scala.io.Source
val relativePath = "setup/setup/script/test.sql"
val stream : InputStream = getClass.getResourceAsStream(relativePath)
val sqlFile : Iterator[String] = Source.fromInputStream(stream).getLines         

这样做,您甚至可以将相同的文件放在src/main/resources中的相同相对路径下。尝试在测试中访问资源文件时,将考虑src/test/resources中的文件。

我希望这有用。