Tengo un archivo data.xml
en src/test/resources/
.¿Cómo acceder a los recursos de prueba?
¿Cómo puedo leer ese archivo en un nuevo FileReader
en mi prueba data.scala
en src/test/scala/
?
Tengo un archivo data.xml
en src/test/resources/
.¿Cómo acceder a los recursos de prueba?
¿Cómo puedo leer ese archivo en un nuevo FileReader
en mi prueba data.scala
en src/test/scala/
?
Se debe acceder a los recursos utilizando los métodos de estilo especiales getResource
que proporciona Java. Dada su ejemplo de data.xml
estar en $SBT_PROJECT_HOME/src/test/resources/
, se puede acceder a él en una prueba de este modo:
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
es ahora sólo un objeto normal de Scala IO para que pueda hacer lo que quiera con él, como la lectura los contenidos y usarlo para los datos de prueba.
Existen otros métodos para obtener el recurso también (por ejemplo, como una secuencia). Para obtener más información, consulte los métodos getResource
en el Java Docs: Class.
sbt copia los archivos de src/test/resources
a target/scala-[scalaVersion]/test-classes
.
Puede acceder a los recursos en las pruebas de la siguiente manera:
Source.fromURL(getClass.getResource("/testData.txt"))
que hace suponer que testData.txt
era directamente bajo 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, se puede hacer algo como esto en una prueba simulada:
import scala.collection.JavaConversions._
for(file <- new File(".").listFiles){
println(file.getAbsolutePath)
}
Entonces, cuando usted sabe que su trayectoria, en la prueba que se puede utilizar como:
new File("./src/test/resources/yourfile.xml")
Los archivos en '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 compilación estructura de directorios. –
Esto podría ser útil, sin embargo, si uno necesita enumerar recursos (es decir, el código no tiene sus nombres corregidos, pero utilizará los archivos que se encuentran allí). – akauppi
@akauppi esto se puede hacer con http://docs.spring.io/spring-framework/docs/2.5.x/api/org/springframework/core/io/support/PathMatchingResourcePatternResolver.html – dk14
Otra alternativa (especialmente si necesita acceder al recurso como File
); es la obtención de su trayectoria a través de:
val path = getClass.getResource("/testData.txt").getPath
val file = new File(path)
como se ha señalado en Scala get file path of file in resources folder
Y en los casos en getClass.getResource
no funciona (no sé ni me importa cuándo o por qué exactamente), com.google.common.io.Resources.getResource
de Google guayaba usualmente lo hace
testCompile "com.google.guava:guava:18.0"
Tuve que agregar un 'getClassLoader' a la instrucción. El resultado fue 'Source.fromURL (getClass.getClassLoader.getResource (" simulation.json "))' – Moebius