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/
?
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/
?
Respostas:
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
É 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/
. Usando getClass.getClassLoader.getResource()
a porção com/mycompany/myapp/module1/utils/blabla/
é removido
Outra alternativa (especialmente se você precisar acessar o recurso como a File
); é obter seu caminho via:
val path = getClass.getResource("/testData.txt").getPath
val file = new File(path)
como foi apontado no Scala, obtenha o caminho do arquivo na pasta de recursos
sbt copia arquivos de src/test/resources
paratarget/scala-[scalaVersion]/test-classes
.
Você pode acessar os recursos em seus testes da seguinte maneira:
Source.fromURL(getClass.getResource("/testData.txt"))
Ele assume que testData.txt
estava diretamente sob a pasta src/test/resources
. Adicione quaisquer subdiretórios, caso contrário.
Para saber onde você está no sistema de arquivos durante o teste, você pode fazer algo assim em um teste fictício:
import scala.collection.JavaConversions._
for(file <- new File(".").listFiles ){
println(file.getAbsolutePath)
}
Então, quando você conhece seu caminho, em seu teste, você pode usá-lo como:
new File("./src/test/resources/yourfile.xml")
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.
getClassLoader
à instrução. O resultado foiSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))