Tengo un archivo data.xml
adentro src/test/resources/
.
¿Cómo puedo leer ese archivo en un nuevo FileReader
en mi prueba data.scala
de src/test/scala/
?
Tengo un archivo data.xml
adentro src/test/resources/
.
¿Cómo puedo leer ese archivo en un nuevo FileReader
en mi prueba data.scala
de src/test/scala/
?
Respuestas:
Se debe acceder a los recursos utilizando los getResource
métodos de estilo especiales que proporciona Java. Dado su ejemplo de data.xml
estar en $SBT_PROJECT_HOME/src/test/resources/
, puede acceder a él en una prueba como esta:
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"))
Por supuesto que source
ahora es solo un objeto Scala IO normal para que pueda hacer lo que quiera con él, como leer el contenido y usarlo para datos de prueba.
También hay otros métodos para obtener el recurso (por ejemplo, como una secuencia). Para obtener más información, consulte los getResource
métodos en Java Docs: Class .
getClassLoader
Se necesita un comentario confirmado de Moebius . Sin ella, la ruta incluye el directorio de jerarquía de clases de la clase de prueba. Algo así como ~/lighthouse/target/scala-2.12/test-classes/com/mycompany/myapp/module1/utils/blabla/
. Se elimina getClass.getClassLoader.getResource()
el uso de la porcióncom/mycompany/myapp/module1/utils/blabla/
Otra alternativa (especialmente si necesita acceder al recurso como a File
); es obtener su camino a través de:
val path = getClass.getResource("/testData.txt").getPath
val file = new File(path)
como se ha señalado en Scala, obtenga la ruta del archivo en la carpeta de recursos
sbt copia archivos de src/test/resources
atarget/scala-[scalaVersion]/test-classes
.
Puede acceder a los recursos en sus pruebas de la siguiente manera:
Source.fromURL(getClass.getResource("/testData.txt"))
Asume que testData.txt
estaba directamente debajo de la carpeta src/test/resources
. Agregue cualquier subdirectorio, de lo contrario.
Para saber dónde se encuentra en el sistema de archivos durante la prueba, puede hacer algo como esto en una prueba ficticia:
import scala.collection.JavaConversions._
for(file <- new File(".").listFiles ){
println(file.getAbsolutePath)
}
Luego, cuando conozca su camino, en su prueba puede usarlo como:
new File("./src/test/resources/yourfile.xml")
src/test/resources
están en CLASSPATH de prueba para que las pruebas puedan acceder a él sin que el código tenga en cuenta la estructura del directorio de compilación.
getClassLoader
a la instrucción. El resultado fueSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))