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/
?
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
a la instrucción. El resultado fueSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))
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 eliminagetClass.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:como se ha señalado en Scala, obtenga la ruta del archivo en la carpeta de recursos
fuente
sbt copia archivos de
src/test/resources
atarget/scala-[scalaVersion]/test-classes
.Puede acceder a los recursos en sus pruebas de la siguiente manera:
Asume que
testData.txt
estaba directamente debajo de la carpetasrc/test/resources
. Agregue cualquier subdirectorio, de lo contrario.fuente
Y en los casos en
getClass.getResource
que no funciona (no sé ni me importa cuándo o por qué exactamente),com.google.common.io.Resources.getResource
generalmente lo hace Google Guavafuente
Para saber dónde se encuentra en el sistema de archivos durante la prueba, puede hacer algo como esto en una prueba ficticia:
Luego, cuando conozca su camino, en su prueba puede usarlo como:
fuente
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.