ฉันมีไฟล์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"))