2011-03-12 17 views

Respuesta

158

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.

+2

Tuve que agregar un 'getClassLoader' a la instrucción. El resultado fue 'Source.fromURL (getClass.getClassLoader.getResource (" simulation.json "))' – Moebius

17

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.

-3

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") 
+0

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. –

+2

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

+0

@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

11

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

0

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" 
Cuestiones relacionadas