J'ai un fichier data.xml
dans src/test/resources/
.
Comment puis-je lire ce fichier dans un nouveau FileReader
dans mon test data.scala
ensrc/test/scala/
?
J'ai un fichier data.xml
dans src/test/resources/
.
Comment puis-je lire ce fichier dans un nouveau FileReader
dans mon test data.scala
ensrc/test/scala/
?
Réponses:
Les ressources sont destinées à être accessibles à l'aide des getResource
méthodes de style spéciales fournies par Java. Compte tenu de votre exemple d' data.xml
être dans $SBT_PROJECT_HOME/src/test/resources/
, vous pouvez y accéder à un test comme ceci:
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"))
Bien sûr, il ne source
s'agit plus que d'un objet Scala IO normal, vous pouvez donc en faire tout ce que vous voulez, comme lire le contenu et l'utiliser pour les données de test.
Il existe également d'autres méthodes pour obtenir la ressource (par exemple sous forme de flux). Pour plus d'informations, consultez les getResource
méthodes de Java Docs: Class .
getClassLoader
est nécessaire. Sans lui, le chemin comprend le répertoire de la hiérarchie des classes de la classe de test. Quelque chose comme ~/lighthouse/target/scala-2.12/test-classes/com/mycompany/myapp/module1/utils/blabla/
. Utilisation de getClass.getClassLoader.getResource()
la portion com/mycompany/myapp/module1/utils/blabla/
est supprimée
Une autre alternative (surtout si vous devez accéder à la ressource en tant que a File
); consiste à obtenir son chemin via:
val path = getClass.getResource("/testData.txt").getPath
val file = new File(path)
comme cela a été souligné dans Scala, obtenir le chemin du fichier dans le dossier des ressources
sbt copie les fichiers de src/test/resources
àtarget/scala-[scalaVersion]/test-classes
.
Vous pouvez accéder aux ressources de vos tests comme suit:
Source.fromURL(getClass.getResource("/testData.txt"))
Il suppose que testData.txt
c'était directement sous le dossier src/test/resources
. Ajoutez des sous-répertoires, sinon.
Pour savoir où vous vous trouvez dans le système de fichiers pendant le test, vous pouvez faire quelque chose comme ceci dans un test factice:
import scala.collection.JavaConversions._
for(file <- new File(".").listFiles ){
println(file.getAbsolutePath)
}
Ensuite, lorsque vous connaissez votre chemin, dans votre test, vous pouvez l'utiliser comme:
new File("./src/test/resources/yourfile.xml")
src/test/resources
sont dans le CLASSPATH de test afin que les tests puissent y accéder sans que le code soit conscient de la structure du répertoire de construction.
getClassLoader
à l'instruction. Le résultat étaitSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))