【问题标题】:Unable to access file in relative path in Scala for test resource无法访问 Scala 中相对路径中的文件以获取测试资源
【发布时间】:2017-07-18 00:28:49
【问题描述】:

我已经使用 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 文件夹而不是测试资源,有人知道我在这里做错了什么吗?

【问题讨论】:

  • path 打印输出有什么作用?
  • 不知道,但不知何故,这段代码现在也可以正常工作了:),一直在尝试不同的东西

标签: scala maven scalatest


【解决方案1】:

就像在 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 的文件。

我希望这会有所帮助。

【讨论】:

  • 我在 src/main/resources/test.txt 上取得了成功,但是一旦我删除 /src/main/resources,我就会发现找不到文件的异常
  • 在这种情况下,您能否将当前资源文件的结构粘贴到此处?不确定我是否理解正确,但如果您没有src/main/resources.../,并且您尝试从属于src/main/scala 的类访问驻留在src/test/resources 中的文件,它将无法正常工作。此外,这样做也不是一个好习惯。测试资源文件应仅在测试中使用,旨在定义额外属性或覆盖主要资源文件以进行测试,但不能反过来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 2018-03-06
  • 2014-07-12
  • 2020-10-31
  • 1970-01-01
  • 2013-01-06
相关资源
最近更新 更多