Mam plik data.xml
w src/test/resources/
.
Jak mogę wczytać ten plik do nowego FileReader
w moim teście data.scala
w src/test/scala/
?
Mam plik data.xml
w src/test/resources/
.
Jak mogę wczytać ten plik do nowego FileReader
w moim teście data.scala
w src/test/scala/
?
Odpowiedzi:
Dostęp do zasobów ma być uzyskiwany przy użyciu specjalnych getResource
metod stylu, które zapewnia Java. Biorąc pod uwagę twój przykład data.xml
bycia 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 source
jest 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 getResource
metodami w dokumencie Java Docs: Class .
getClassLoader
jest 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/resources
do 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.txt
znajdował 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/resources
znajdują się w ścieżce CLASSPATH testu, więc testy mogą uzyskać do niego dostęp bez wiedzy kodu o strukturze katalogu kompilacji.
getClassLoader
do instrukcji. Wynik byłSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))