如何访问Scala中的测试资源?

发布于 2024-10-21 08:08:25 字数 178 浏览 1 评论 0 原文

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

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

I have a file data.xml in src/test/resources/.

How can I read that file into a new FileReader in my test data.scala in src/test/scala/?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

[旋木] 2024-10-28 08:08:25

资源应该使用 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 对象,因此您可以用它做任何您想做的事情,例如读取内容并将其用于测试数据。

还有其他方法可以获取资源(例如作为流)。有关详细信息,请查看 getResource 方法rel="noreferrer">Java 文档:类

Resources are meant to be accessed using the special getResource style methods that Java provides. Given your example of data.xml being in $SBT_PROJECT_HOME/src/test/resources/, you can access it in a test like so:

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"))

Of course that source is now just a normal Scala IO object so you can do anything you want with it, like reading the contents and using it for test data.

There are other methods to get the resource as well (for example as a stream). For more information look at the getResource methods on the Java Docs: Class.

素罗衫 2024-10-28 08:08:25

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

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

正如 Scala 中指出的那样获取资源文件夹中文件的文件路径

Another alternative (especially if you need to access resource as a File); is to obtain it's path via:

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

as has been pointed out in Scala get file path of file in resources folder

吻安 2024-10-28 08:08:25

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

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

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

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

sbt copies files from src/test/resources to target/scala-[scalaVersion]/test-classes.

You can access the resources in your tests as follows:

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

It does assume that testData.txt was directly under the folder src/test/resources. Add any subdirectories, otherwise.

伴梦长久 2024-10-28 08:08:25

如果 getClass.getResource 不起作用(不知道也不关心具体时间或原因),来自 Google 的 com.google.common.io.Resources.getResource番石榴通常这样做

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

And in cases where getClass.getResource does not work (don't know nor care when or why exactly), com.google.common.io.Resources.getResource from Google Guava usually does

testCompile "com.google.guava:guava:18.0"
绿阴红影里的.如风往事 2024-10-28 08:08:25

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

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

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

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

To know where you are in file system during test, you can do something like this in a dummy test:

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

Then, when you know your path, in your test you can use it as:

new File("./src/test/resources/yourfile.xml")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文