如何使用scalatest从测试资源中读取文件?

时间:2017-10-24 23:48:54

标签: scala sbt scalatest

我正在使用SBT在Scala项目中工作,因此该项目遵循默认目录结构:

project_name/
├── build.sbt
├── src
│   ├── main
│   │   ├── resources
│   │   │   └── production.txt
│   │   └── scala
│   │       └── ...
│   └── test
│       ├── resources
│       │   └── test.txt
│       └── scala
│           └── ...

当我尝试读取资源文件夹中的文件时,在生产代码中,我试试这个,并且工作得很好:

object FileReader extends App {
  io.Source.fromResource("production.txt").getLines.toList.foreach(println(_))
}

但是当我尝试在测试代码中做同样的事情时:

class FileReaderTest extends FreeSpec with Matchers {
  "Source" - {
    "reads files from resources folder" in {
      val lines = io.Source.fromResource("test.txt").getLines.toList
      lines should be(List("Hello","World"))
    }
  }
}

我得到了一个N​​PE例外:

[info] Source
[info] - reads files from resources folder *** FAILED ***
[info]   java.lang.NullPointerException:
[info]   at java.io.Reader.<init>(Reader.java:78)
[info]   at java.io.InputStreamReader.<init>(InputStreamReader.java:129)
[info]   at scala.io.BufferedSource.reader(BufferedSource.scala:22)
[info]   at scala.io.BufferedSource.bufferedReader(BufferedSource.scala:23)
[info]   at scala.io.BufferedSource.charReader$lzycompute(BufferedSource.scala:33)
[info]   at scala.io.BufferedSource.charReader(BufferedSource.scala:31)
[info]   at scala.io.BufferedSource.scala$io$BufferedSource$$decachedReader(BufferedSource.scala:60)
[info]   at scala.io.BufferedSource$BufferedLineIterator.<init>(BufferedSource.scala:65)
[info]   at scala.io.BufferedSource.getLines(BufferedSource.scala:84)
[info]   ...

当我尝试在测试中阅读production.txt文件时,它也可以正常工作。所以我的猜测是,由于某种原因,测试资源文件夹没有被加载到类路径中。所以有了这个,我研究了SBT,似乎默认情况下,src/test/resources文件夹已经是默认文件夹,事实上,只需检查SBT shell,它就会产生以下结果:

> show test:resourceDirectory
[info] <path to project>/src/test/resources

> show test:unmanagedResources
[info] * <path to project>/src/test/resources

> show test:unmanagedResourceDirectories
[info] * <path to project>/src/test/resources

很明显,我错过了一些东西,但不知道在哪里继续研究。

顺便说一句,我使用的是Scala 2.12.4,SBT 1.0.2和scalatest 3.0.4

更新

似乎问题与SBT构建或IDE有关,正如我所做的那样可以使用build.sbt文件进行实验,更改和玩unmanagedResourcesresourceDirectory以及其他一些文件在Test范围内,最后在某处出现了腐败现象。

我正在使用IntelliJ IDEA,在使用SBT Test范围删除所有实验后,删除.idea文件夹并重新导入SBT项目,它运行正常。

另外,对于可能与其他问题重复的问题,我认为存在差异,因为最初它使用位于src/main/resources的资源,而不是src/test/resources。< / p>

0 个答案:

没有答案