ฉันมีไฟล์data.xml
ในsrc/test/resources/
ใน
ฉันสามารถอ่านไฟล์ที่เข้าใหม่FileReader
ในการทดสอบของฉันdata.scala
ในsrc/test/scala/
?
ฉันมีไฟล์data.xml
ในsrc/test/resources/
ใน
ฉันสามารถอ่านไฟล์ที่เข้าใหม่FileReader
ในการทดสอบของฉันdata.scala
ในsrc/test/scala/
?
คำตอบ:
ทรัพยากรมีไว้เพื่อให้เข้าถึงได้โดยใช้getResource
วิธีลักษณะพิเศษที่ Java มีให้ ได้รับตัวอย่างของคุณของdata.xml
การอยู่ใน$SBT_PROJECT_HOME/src/test/resources/
คุณสามารถเข้าถึงได้ในการทดสอบเช่นดังนั้น:
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"))
แน่นอนว่า source
ตอนนี้เป็นเพียงวัตถุ Scala IO ปกติเพื่อให้คุณสามารถทำสิ่งที่คุณต้องการได้เช่นอ่านเนื้อหาและใช้สำหรับทดสอบข้อมูล
มีวิธีอื่นในการรับทรัพยากรเช่น (เช่นสตรีม) สำหรับข้อมูลเพิ่มเติมดูข้อมูลที่getResource
วิธีการในJava เอกสาร: คลาส
getClassLoader
ต้องการความคิดเห็น Moebius ที่ยืนยันแล้ว ถ้าไม่มีพา ธ จะมีไดเร็กทอรีลำดับชั้นของคลาสทดสอบ ~/lighthouse/target/scala-2.12/test-classes/com/mycompany/myapp/module1/utils/blabla/
สิ่งที่ชอบ การใช้getClass.getClassLoader.getResource()
ส่วนที่com/mycompany/myapp/module1/utils/blabla/
ถูกลบออก
ทางเลือกอื่น (โดยเฉพาะถ้าคุณต้องการเข้าถึงทรัพยากรในแบบ a File
); คือการได้รับมันเส้นทางผ่าน:
val path = getClass.getResource("/testData.txt").getPath
val file = new File(path)
ตามที่ได้รับการชี้ให้เห็นในScala รับเส้นทางไฟล์ของไฟล์ในโฟลเดอร์ทรัพยากร
sbt คัดลอกไฟล์จากsrc/test/resources
ไปยังtarget/scala-[scalaVersion]/test-classes
ไป
คุณสามารถเข้าถึงทรัพยากรในการทดสอบของคุณดังนี้:
Source.fromURL(getClass.getResource("/testData.txt"))
มันถือว่าtestData.txt
อยู่ใต้โฟลเดอร์src/test/resources
โดยตรง เพิ่มไดเรกทอรีย่อยมิฉะนั้น
และในกรณีที่getClass.getResource
ไม่ทำงาน (ไม่ทราบหรือไม่สนใจว่าจะทำเมื่อใดหรือเพราะเหตุใด) com.google.common.io.Resources.getResource
จาก Google Guava
testCompile "com.google.guava:guava:18.0"
หากต้องการทราบว่าคุณอยู่ที่ไหนในระบบไฟล์ในระหว่างการทดสอบคุณสามารถทำสิ่งนี้ในการทดสอบตัวอย่าง:
import scala.collection.JavaConversions._
for(file <- new File(".").listFiles ){
println(file.getAbsolutePath)
}
จากนั้นเมื่อคุณรู้เส้นทางของคุณในการทดสอบคุณสามารถใช้เป็น:
new File("./src/test/resources/yourfile.xml")
src/test/resources
อยู่ใน CLASSPATH ของการทดสอบเพื่อให้การทดสอบสามารถเข้าถึงได้โดยไม่ต้องใช้รหัสที่ทราบถึงโครงสร้างไดเรกทอรีการสร้าง
getClassLoader
คำสั่ง ผลลัพธ์คือSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))