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/
?
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
do instrukcji. Wynik byłSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))
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/
. KorzystaniegetClass.getClassLoader.getResource()
z porcjicom/mycompany/myapp/module1/utils/blabla/
jest usuwaneInna alternatywa (zwłaszcza jeśli potrzebujesz dostępu do zasobu jako a
File
); jest uzyskanie ścieżki poprzez:jak wskazano w Scali, pobierz ścieżkę do pliku w folderze zasobów
źródło
sbt kopiuje pliki z
src/test/resources
dotarget/scala-[scalaVersion]/test-classes
.Dostęp do zasobów w testach można uzyskać w następujący sposób:
Zakłada się, że
testData.txt
znajdował się bezpośrednio pod folderemsrc/test/resources
. W przeciwnym razie dodaj dowolne podkatalogi.źródło
A w przypadkach,
getClass.getResource
gdy nie działa (nie wiem i nie obchodzi mnie, kiedy i dlaczego dokładnie),com.google.common.io.Resources.getResource
z Google Guava zwykle działaźródło
Aby wiedzieć, gdzie jesteś w systemie plików podczas testu, możesz zrobić coś takiego w teście fikcyjnym:
Następnie, kiedy już znasz swoją ścieżkę, w swoim teście możesz użyć jej jako:
źródło
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.