【问题标题】:How to get, during test, file generated by sbt (resourceGenerators)?如何在测试期间获取 sbt (resourceGenerators) 生成的文件?
【发布时间】:2021-06-09 19:36:30
【问题描述】:

所以我有这个设置

(resourceGenerators in Test) += Def.task {
  val file = resourceManaged.value / "simplefolder" / "simplefile"
  IO.write(file, "Hello world!")
  Seq(file)
}.taskValue

在一些测试中我有

Source.fromResource("simplefolder/simplefile").mkString

我看到该文件是在 target/scala-*/resource_managed 文件夹中创建的,但我仍然无法在测试期间使用,因为该代码会引发 NullPointerException...我在那里做错了什么?

如果文件不是在文件夹simplefolder 中创建的,它可以工作,但是当在resourceManaged.value 文件夹内的另一个文件夹中创建时,它就不起作用

【问题讨论】:

  • 我编辑了问题
  • 可以加载非生成的资源文件吗?也许这是类加载器的问题,您是否尝试过分叉测试?您还可以使用test:console 在具有测试类路径的 REPL 中进行游戏,以查看是否可以列出所有资源。
  • 完成...我运行了 sbt test:console。所有测试类确实都在那里,但是代码Source.fromResource("simplefile").mkString 确实在那里,它可以工作......但不是在测试期间:(
  • 您是否能够领导手动放置在src/test/resources 中的资源?
  • 是的,如果我手动放在那里,我可以正常阅读。顺便说一句,我编辑了之前的评论,因为在测试控制台中,我实际上可以读取文件

标签: scala sbt code-generation


【解决方案1】:

范围至 Test 整个

val file = (Test / resourceManaged).value / "simplefolder" / "simplefile"

因为show Test / managedResourceDirectories给了

.../target/scala-2.13/resource_managed/test

注意最后的test 目录。

【讨论】:

  • 试过了,一切都在编译范围内,它也能正常工作,所以它就是这样。非常感谢!
猜你喜欢
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多