Вопрос
Я не смог найти, как включить ресурсы в тестовый код с 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"
}