Saya memiliki file data.xml
di src/test/resources/
.
Bagaimana saya bisa membaca file itu menjadi yang baru FileReader
dalam pengujian saya data.scala
di src/test/scala/
?
Sumber daya dimaksudkan untuk diakses menggunakan getResource
metode gaya khusus yang disediakan Java. Mengingat contoh Anda data.xml
berada di $SBT_PROJECT_HOME/src/test/resources/
, Anda dapat mengaksesnya dalam tes seperti ini:
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"))
Tentu saja itu source
sekarang hanyalah objek Scala IO biasa sehingga Anda dapat melakukan apa pun yang Anda inginkan, seperti membaca konten dan menggunakannya untuk data pengujian.
Ada metode lain untuk mendapatkan sumber daya juga (misalnya sebagai aliran). Untuk informasi selengkapnya, lihat getResource
metode di Java Docs: Class .
getClassLoader
instruksi. Hasilnya adalahSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))
getClassLoader
Diperlukan komentar Moebius yang dikonfirmasi . Tanpanya, jalur menyertakan direktori hierarki kelas dari kelas pengujian. Sesuatu seperti~/lighthouse/target/scala-2.12/test-classes/com/mycompany/myapp/module1/utils/blabla/
. MenggunakangetClass.getClassLoader.getResource()
porsicom/mycompany/myapp/module1/utils/blabla/
dihilangkanAlternatif lain (terutama jika Anda perlu mengakses sumber daya sebagai a
File
); adalah mendapatkan jalurnya melalui:val path = getClass.getResource("/testData.txt").getPath val file = new File(path)
Seperti yang telah ditunjukkan di Scala, dapatkan jalur file dari file di folder sumber daya
sumber
sbt menyalin file dari
src/test/resources
ketarget/scala-[scalaVersion]/test-classes
.Anda dapat mengakses sumber daya dalam pengujian Anda sebagai berikut:
Source.fromURL(getClass.getResource("/testData.txt"))
Itu berasumsi bahwa
testData.txt
itu langsung di bawah foldersrc/test/resources
. Tambahkan subdirektori mana pun, jika tidak.sumber
Dan dalam kasus di mana
getClass.getResource
tidak berfungsi (tidak tahu atau peduli kapan atau mengapa tepatnya),com.google.common.io.Resources.getResource
dari Google Guava biasanya bisatestCompile "com.google.guava:guava:18.0"
sumber
Untuk mengetahui di mana Anda berada dalam sistem file selama pengujian, Anda dapat melakukan hal seperti ini dalam pengujian dummy:
import scala.collection.JavaConversions._ for(file <- new File(".").listFiles ){ println(file.getAbsolutePath) }
Kemudian, saat Anda mengetahui jalur Anda, dalam pengujian Anda, Anda dapat menggunakannya sebagai:
new File("./src/test/resources/yourfile.xml")
sumber
src/test/resources
berada dalam CLASSPATH pengujian sehingga pengujian dapat mengaksesnya tanpa kode mengetahui struktur direktori build.