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/
?
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/
?
Antworten:
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
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/
. Verwendung getClass.getClassLoader.getResource()
der Portion com/mycompany/myapp/module1/utils/blabla/
wird entfernt
Eine weitere Alternative (insbesondere, wenn Sie als Ressource auf eine Ressource zugreifen müssen File
); ist es, seinen Pfad zu erhalten über:
val path = getClass.getResource("/testData.txt").getPath
val file = new File(path)
Wie in Scala erwähnt, wird der Dateipfad der Datei im Ressourcenordner abgerufen
sbt kopiert Dateien von src/test/resources
nach target/scala-[scalaVersion]/test-classes
.
Sie können wie folgt auf die Ressourcen in Ihren Tests zugreifen:
Source.fromURL(getClass.getResource("/testData.txt"))
Es wird davon ausgegangen, dass testData.txt
sich das direkt unter dem Ordner befand src/test/resources
. Fügen Sie andernfalls Unterverzeichnisse hinzu.
Um zu wissen, wo Sie sich während des Tests im Dateisystem befinden, können Sie in einem Dummy-Test Folgendes tun:
import scala.collection.JavaConversions._
for(file <- new File(".").listFiles ){
println(file.getAbsolutePath)
}
Wenn Sie Ihren Pfad kennen, können Sie ihn in Ihrem Test wie folgt verwenden:
new File("./src/test/resources/yourfile.xml")
src/test/resources
befinden sich im CLASSPATH des Tests, sodass Tests darauf zugreifen können, ohne dass der Code die Build-Verzeichnisstruktur kennt.
getClassLoader
der Anweisung ein hinzufügen . Das Ergebnis warSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))