Ich habe eine Datei data.xmlin src/test/resources/.
Wie kann ich diese Datei in ein neues lesen FileReaderin meinem Test data.scalain src/test/scala/?
Ich habe eine Datei data.xmlin src/test/resources/.
Wie kann ich diese Datei in ein neues lesen FileReaderin meinem Test data.scalain src/test/scala/?
Antworten:
Der Zugriff auf Ressourcen soll mit den von getResourceJava bereitgestellten speziellen Stilmethoden erfolgen. Angesichts Ihrem Beispiel data.xmlist 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 sourceist 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 getResourceMethoden in Java Docs: Class .
getClassLoaderist 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/resourcesnach 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.txtsich 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/resourcesbefinden sich im CLASSPATH des Tests, sodass Tests darauf zugreifen können, ohne dass der Code die Build-Verzeichnisstruktur kennt.
getClassLoaderder Anweisung ein hinzufügen . Das Ergebnis warSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))