【问题标题】:How to read resources in test code with Play Framework?如何使用 Play Framework 读取测试代码中的资源?
【发布时间】:2019-02-15 12:44:41
【问题描述】:

问题

我找不到如何使用 Play Framework 在测试代码中包含资源。

我想写getResource代码@/test/controllers/HomeControllerSpec.scala如下。

"HomeController Test" should {
  val inputStream = getClass.getResourceAsStream("test.json")
  ...
}

但此代码要求将“test.json”放在目标目录中。 我找到了一种使用 Inject 和 play.api.Environment 的方法,但是这种方法在测试代码中效果不佳。

Getting a resource file as an InputStream in Playframework

在测试代码中读取资源有什么最佳实践吗?

附加信息

我尝试了以下代码@/play/test/controllers/HomeControllerSpec.scala

val source = getClass.getResource("/").getPath
println(source.toString())

而且我还得到了以下结果(/play 是 play 项目的根目录)。

/play/target/scala-2.12/test-classes/

通常,/target 会被忽略(用 .gitignore 编写)。所以我想知道在Play测试代码中读取文本文件的方法(放在/test中)。

解决方案(已解决。感谢您的 cmets 和帮助。)

我尝试了以下命令

sbt "show test:resourceDirectory"

得到以下结果。

/play/test/resources

这意味着放置在此目录中的文件用作资源并复制到目标目录(在我的例子中是 /play/target/scala-2.12/test-classes)。所以我把 test.json 放在了

/play/test/resources/test.json

并且可以通过以下代码读取该文件。

val source = getClass.getResource("/test.json").getPath
val code = getClass.getResourceAsStream("/test.json")
println("getPath of test.json: "+ source)
println("text of test.json: " + IOUtils.toString(code))

输出

getPath of test.json: /play/target/scala-2.12/test- 
classes/test.json
text of test.json: {
     "key": "value"
}

【问题讨论】:

  • 资源是什么意思?您的意思是您添加到/public 文件夹中的文件?或者您可以根据您在routes 中定义的路线找到一些资源?
  • 换句话说test.json文件在哪里?

标签: scala testing playframework


【解决方案1】:

你的项目目录结构(Play Framework)

  • /
    • /app
    • /conf
    • /测试
      • test.json
      • /控制器
        • HomeControllerSpec.scala

无法从/test访问test.json的原因

  • 源路径(/app/test)中除“*.scala”之外的任何文件都被排除在外。
  • 编译时排除/test 中的test.json

另一种方式

test.json 放入/test/resources

  • /
    • /app
    • /conf
    • /测试
      • /资源
        • test.json
      • /控制器
        • HomeControllerSpec.scala

另请阅读

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多