Tengo un archivo data.xmladentro src/test/resources/.
¿Cómo puedo leer ese archivo en un nuevo FileReader en mi prueba data.scalade src/test/scala/?
Tengo un archivo data.xmladentro src/test/resources/.
¿Cómo puedo leer ese archivo en un nuevo FileReader en mi prueba data.scalade src/test/scala/?
Respuestas:
Se debe acceder a los recursos utilizando los getResourcemétodos de estilo especiales que proporciona Java. Dado su ejemplo de data.xmlestar 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 getResourcemétodos en Java Docs: Class .
getClassLoaderSe 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/resourcesatarget/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.txtestaba 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/resourcesestá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.
getClassLoadera la instrucción. El resultado fueSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))