Saya memiliki file data.xmldi src/test/resources/.
Bagaimana saya bisa membaca file itu menjadi yang baru FileReaderdalam pengujian saya data.scaladi src/test/scala/?
Saya memiliki file data.xmldi src/test/resources/.
Bagaimana saya bisa membaca file itu menjadi yang baru FileReaderdalam pengujian saya data.scaladi src/test/scala/?
Jawaban:
Sumber daya dimaksudkan untuk diakses menggunakan getResourcemetode gaya khusus yang disediakan Java. Mengingat contoh Anda data.xmlberada 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 sourcesekarang 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 getResourcemetode di Java Docs: Class .
getClassLoaderDiperlukan 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/resourceske 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.txtitu langsung di bawah folder src/test/resources. Tambahkan subdirektori mana pun, jika tidak.
Dan dalam kasus di mana getClass.getResourcetidak berfungsi (tidak tahu atau peduli kapan atau mengapa tepatnya), com.google.common.io.Resources.getResourcedari 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/resourcesberada dalam CLASSPATH pengujian sehingga pengujian dapat mengaksesnya tanpa kode mengetahui struktur direktori build.
getClassLoaderinstruksi. Hasilnya adalahSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))