Как читать ресурсы в тестовом коде с помощью Play Framework? - PullRequest
0 голосов
/ 11 сентября 2018

Вопрос

Я не смог найти, как включить ресурсы в тестовый код с Play Framework.

Я хочу написать код getResource @ / test / controllers / HomeControllerSpec.scala следующим образом.

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

Но этот код требует, чтобы "test.json" помещался в целевой каталог. Я нашел способ использовать Inject и play.api.Environment, но этот метод плохо работает в тестовом коде.

Получение файла ресурса в качестве InputStream в 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).

Решение (решено. Спасибо за комментарии и помощь.)

Я попробовал следующую команду

sbt "show test:resourceDirectory"

и получил следующий результат.

/play/test/resources

Это означает, что файлы, размещенные в этом каталоге, используются в качестве ресурсов и копируются в целевой каталог (в моем случае /play/target/scala-2.12/test-classes). Поэтому я поставил test.json на

/ воспроизведение / тест / ресурсы / 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"
}

1 Ответ

0 голосов
/ 12 сентября 2018

Структура каталога вашего проекта (Play Framework)

  • /
    • / app
    • / conf
    • / test
      • test.json
      • / контроллеры
        • HomeControllerSpec.scala

Причинапочему вы не можете получить доступ к test.json из /test

  • Любые файлы, кроме '* .scala' в исходном пути (/app, /test), исключены.
  • test.json в /test исключено при компиляции.

Альтернативный способ

Положить test.json в /test/resources

  • /
    • / app
    • / conf
    • / test
      • / resources
        • test.json
      • / контроллеры
        • HomeControllerSpec.scala

Читайте также

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...