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/
?
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/
?
Jawaban:
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
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/
. Menggunakan getClass.getClassLoader.getResource()
porsi com/mycompany/myapp/module1/utils/blabla/
dihilangkan
Alternatif 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
sbt menyalin file dari src/test/resources
ke target/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 folder src/test/resources
. Tambahkan subdirektori mana pun, jika tidak.
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 bisa
testCompile "com.google.guava:guava:18.0"
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")
src/test/resources
berada dalam CLASSPATH pengujian sehingga pengujian dapat mengaksesnya tanpa kode mengetahui struktur direktori build.
getClassLoader
instruksi. Hasilnya adalahSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))