Mam plik data.xmlw src/test/resources/.
Jak mogę wczytać ten plik do nowego FileReaderw moim teście data.scalaw src/test/scala/?
Mam plik data.xmlw src/test/resources/.
Jak mogę wczytać ten plik do nowego FileReaderw moim teście data.scalaw src/test/scala/?
Odpowiedzi:
Dostęp do zasobów ma być uzyskiwany przy użyciu specjalnych getResourcemetod stylu, które zapewnia Java. Biorąc pod uwagę twój przykład data.xmlbycia w $SBT_PROJECT_HOME/src/test/resources/, możesz uzyskać do niego dostęp w teście, takim jak ten:
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"))
Oczywiście sourcejest to teraz zwykły obiekt Scala IO, więc możesz z nim zrobić wszystko, co chcesz, na przykład czytać zawartość i używać go do testowania danych.
Istnieją również inne metody pobierania zasobu (na przykład jako strumień). Aby uzyskać więcej informacji, zapoznaj się z getResourcemetodami w dokumencie Java Docs: Class .
getClassLoaderjest potrzebny. Bez tego ścieżka zawiera katalog hierarchii klas klasy testowej. Coś jak ~/lighthouse/target/scala-2.12/test-classes/com/mycompany/myapp/module1/utils/blabla/. Korzystanie getClass.getClassLoader.getResource()z porcji com/mycompany/myapp/module1/utils/blabla/jest usuwane
Inna alternatywa (zwłaszcza jeśli potrzebujesz dostępu do zasobu jako a File); jest uzyskanie ścieżki poprzez:
val path = getClass.getResource("/testData.txt").getPath
val file = new File(path)
jak wskazano w Scali, pobierz ścieżkę do pliku w folderze zasobów
sbt kopiuje pliki z src/test/resourcesdo target/scala-[scalaVersion]/test-classes.
Dostęp do zasobów w testach można uzyskać w następujący sposób:
Source.fromURL(getClass.getResource("/testData.txt"))
Zakłada się, że testData.txtznajdował się bezpośrednio pod folderem src/test/resources. W przeciwnym razie dodaj dowolne podkatalogi.
Aby wiedzieć, gdzie jesteś w systemie plików podczas testu, możesz zrobić coś takiego w teście fikcyjnym:
import scala.collection.JavaConversions._
for(file <- new File(".").listFiles ){
println(file.getAbsolutePath)
}
Następnie, kiedy już znasz swoją ścieżkę, w swoim teście możesz użyć jej jako:
new File("./src/test/resources/yourfile.xml")
src/test/resourcesznajdują się w ścieżce CLASSPATH testu, więc testy mogą uzyskać do niego dostęp bez wiedzy kodu o strukturze katalogu kompilacji.
getClassLoaderdo instrukcji. Wynik byłSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))