Bagaimana cara mengakses sumber daya uji di Scala?


138

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:


204

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 .


8
Saya harus menambahkan getClassLoaderinstruksi. Hasilnya adalahSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))
Moebius

1
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
Polymerase


24

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.


0

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"

-4

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")

File di bawah src/test/resourcesberada dalam CLASSPATH pengujian sehingga pengujian dapat mengaksesnya tanpa kode mengetahui struktur direktori build.
Jacek Laskowski

2
Ini mungkin berguna meskipun, jika seseorang perlu menghitung sumber daya (yaitu kode tidak memiliki nama tetap, tetapi akan menggunakan file apapun yang ditempatkan di bawah sana).
akauppi

@akauppi ini dapat dilakukan dengan docs.spring.io/spring-framework/docs/2.5.x/api/org/…
dk14

ini akan membuat Anda mendapat masalah saat Anda menerapkan aplikasi Anda sebagai botol besar
Alex Monras
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.