Как читать файлы из тестовых ресурсов с помощью scalatest? [Дубликат]

Этот код может быть полезен

L ={x, y, z}
T= ((0,"c"),(1,"d"),(2,"e"),(3,"f"),)
List2=[]
for t in T :
if t[0] in L :
    List2.append(t[1])
    break;
69
задан Matteo Guarnerio 4 December 2015 в 11:57
поделиться

3 ответа

Ресурсы в Scala работают точно так же, как в Java. Лучше всего следовать лучшим примерам Java и поместить все ресурсы в src/main/resources и src/test/resources.

Пример структуры папок:

testing_styles/
├── build.sbt
├── src
│   └── main
│       ├── resources
│       │   └── readme.txt

Scala 2.12.x

Для чтения ресурсов объект Source предоставляет метод fromResource.

import scala.io.Source
val readmeText : Iterator[String] = Source.fromResource("readme.txt").getLines

previous Версии

Для чтения ресурсов вы можете использовать getClass.getResource и getClass.getResourceAsStream.

val stream : InputStream = getClass.getResourceAsStream("/readme.txt")
val lines = scala.io.Source.fromInputStream( stream ).getLines

Имейте в виду, что getResourceAsStream также отлично работает, когда ресурсы являются частью jar, getResource, который возвращает URL-адрес, который часто используется для создания файла, может привести к проблемам там.

Более чистая обратная связь с ошибкой (2.12.x)

Чтобы избежать несанкционированных Java NPE (Java настолько ужасен), рассмотрите:

import scala.io.Source
import scala.util.Try

def niceFeedbackReadResource(resource: String): List[String] =
  Try(Source.fromResource(resource).getLines.toList)
    .recover(throw new FileNotFoundException(resource))

Чтобы получить значимые FNFE вместо этого.

Для производственного кода я также предлагаю убедиться, что источник снова закрыт.

144
ответ дан Andreas Neumann 26 August 2018 в 12:30
поделиться
import scala.io.Source

object Demo {

  def main(args: Array[String]): Unit = {

    val fileStream = getClass.getResourceAsStream("/json-sample.js")
    val lines = Source.fromInputStream(fileStream).getLines
    lines.foreach(line => println(line))

  }

}

1
ответ дан Kim 26 August 2018 в 12:30
поделиться

Для Scala> = 2.12 используйте Source.fromResource:

scala.io.Source.fromResource("located_in_resouces.any")
20
ответ дан Yuval Itzchakov 26 August 2018 в 12:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: