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/?
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 .
getClassLoadera la instrucción. El resultado fueSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))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 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/resourcesatarget/scala-[scalaVersion]/test-classes.Puede acceder a los recursos en sus pruebas de la siguiente manera:
Asume que
testData.txtestaba directamente debajo de la carpetasrc/test/resources. Agregue cualquier subdirectorio, de lo contrario.fuente
Y en los casos en
getClass.getResourceque no funciona (no sé ni me importa cuándo o por qué exactamente),com.google.common.io.Resources.getResourcegeneralmente 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/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.