Ich habe eine Datei data.xml
in src/test/resources/
.
Wie kann ich diese Datei in ein neues lesen FileReader
in meinem Test data.scala
in src/test/scala/
?
Der Zugriff auf Ressourcen soll mit den von getResource
Java bereitgestellten speziellen Stilmethoden erfolgen. Angesichts Ihrem Beispiel data.xml
ist in $SBT_PROJECT_HOME/src/test/resources/
, Sie darauf zugreifen können in einem Test wie folgt:
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"))
Natürlich source
ist das jetzt nur noch ein normales Scala-E / A-Objekt, sodass Sie damit alles tun können, was Sie wollen, z. B. den Inhalt lesen und für Testdaten verwenden.
Es gibt auch andere Methoden, um die Ressource abzurufen (z. B. als Stream). Weitere Informationen finden Sie in den getResource
Methoden in Java Docs: Class .
getClassLoader
der Anweisung ein hinzufügen . Das Ergebnis warSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))
getClassLoader
ist erforderlich. Ohne sie enthält der Pfad das Klassenhierarchieverzeichnis der Testklasse. So etwas wie~/lighthouse/target/scala-2.12/test-classes/com/mycompany/myapp/module1/utils/blabla/
. VerwendunggetClass.getClassLoader.getResource()
der Portioncom/mycompany/myapp/module1/utils/blabla/
wird entferntEine weitere Alternative (insbesondere, wenn Sie als Ressource auf eine Ressource zugreifen müssen
File
); ist es, seinen Pfad zu erhalten über:Wie in Scala erwähnt, wird der Dateipfad der Datei im Ressourcenordner abgerufen
quelle
sbt kopiert Dateien von
src/test/resources
nachtarget/scala-[scalaVersion]/test-classes
.Sie können wie folgt auf die Ressourcen in Ihren Tests zugreifen:
Es wird davon ausgegangen, dass
testData.txt
sich das direkt unter dem Ordner befandsrc/test/resources
. Fügen Sie andernfalls Unterverzeichnisse hinzu.quelle
Und in Fällen, in denen
getClass.getResource
dies nicht funktioniert (weiß nicht, wann oder warum genau),com.google.common.io.Resources.getResource
funktioniert dies normalerweise bei Google Guavaquelle
Um zu wissen, wo Sie sich während des Tests im Dateisystem befinden, können Sie in einem Dummy-Test Folgendes tun:
Wenn Sie Ihren Pfad kennen, können Sie ihn in Ihrem Test wie folgt verwenden:
quelle
src/test/resources
befinden sich im CLASSPATH des Tests, sodass Tests darauf zugreifen können, ohne dass der Code die Build-Verzeichnisstruktur kennt.