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/
?
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
à l'instruction. Le résultat étaitSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))
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 degetClass.getClassLoader.getResource()
la portioncom/mycompany/myapp/module1/utils/blabla/
est suppriméeUne autre alternative (surtout si vous devez accéder à la ressource en tant que a
File
); consiste à obtenir son chemin via:comme cela a été souligné dans Scala, obtenir le chemin du fichier dans le dossier des ressources
la source
sbt copie les fichiers de
src/test/resources
àtarget/scala-[scalaVersion]/test-classes
.Vous pouvez accéder aux ressources de vos tests comme suit:
Il suppose que
testData.txt
c'était directement sous le dossiersrc/test/resources
. Ajoutez des sous-répertoires, sinon.la source
Et dans les cas où
getClass.getResource
cela ne fonctionne pas (je ne sais pas, je ne sais pas quand ou pourquoi exactement),com.google.common.io.Resources.getResource
de Google Guava le fait généralementla source
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:
Ensuite, lorsque vous connaissez votre chemin, dans votre test, vous pouvez l'utiliser comme:
la source
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.