Eu tenho um arquivo data.xml
em src/test/resources/
.
Como posso ler esse arquivo em um novo FileReader
no meu teste data.scala
em src/test/scala/
?
Os recursos devem ser acessados usando os getResource
métodos de estilo especiais que o Java fornece. Dado o seu exemplo de data.xml
participação $SBT_PROJECT_HOME/src/test/resources/
, você pode acessá-lo em um teste como este:
import scala.io.Source
// The string argument given to getResource is a path relative to
// the resources directory.
val source = Source.fromURL(getClass.getResource("/data.xml"))
Claro que source
agora é apenas um objeto Scala IO normal para que você possa fazer o que quiser com ele, como ler o conteúdo e usá-lo para dados de teste.
Existem outros métodos para obter o recurso também (por exemplo, como um fluxo). Para obter mais informações, consulte os getResource
métodos no Java Docs: Class .
getClassLoader
à instrução. O resultado foiSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))
getClassLoader
É necessário um comentário confirmado de Moebius . Sem ele, o caminho inclui o diretório de hierarquia de classes da classe de teste. Algo como~/lighthouse/target/scala-2.12/test-classes/com/mycompany/myapp/module1/utils/blabla/
. UsandogetClass.getClassLoader.getResource()
a porçãocom/mycompany/myapp/module1/utils/blabla/
é removidoOutra alternativa (especialmente se você precisar acessar o recurso como a
File
); é obter seu caminho via:como foi apontado no Scala, obtenha o caminho do arquivo na pasta de recursos
fonte
sbt copia arquivos de
src/test/resources
paratarget/scala-[scalaVersion]/test-classes
.Você pode acessar os recursos em seus testes da seguinte maneira:
Ele assume que
testData.txt
estava diretamente sob a pastasrc/test/resources
. Adicione quaisquer subdiretórios, caso contrário.fonte
E nos casos em
getClass.getResource
que não funciona (não sabe nem se importa quando ou por que exatamente), ocom.google.common.io.Resources.getResource
Google Guava geralmente funcionafonte
Para saber onde você está no sistema de arquivos durante o teste, você pode fazer algo assim em um teste fictício:
Então, quando você conhece seu caminho, em seu teste, você pode usá-lo como:
fonte
src/test/resources
estão no CLASSPATH do teste, para que os testes possam acessá-lo sem que o código esteja ciente da estrutura do diretório de construção.