स्काला में परीक्षण संसाधनों का उपयोग कैसे करें?


137

मैं एक फ़ाइल है data.xmlमें src/test/resources/

मैं उस फ़ाइल को FileReaderअपने परीक्षण data.scalaमें एक नए में कैसे पढ़ सकता हूं src/test/scala/?

जवाबों:


202

संसाधनों को getResourceजावा द्वारा प्रदान की जाने वाली विशेष शैली विधियों का उपयोग करके एक्सेस किया जाना है । में 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अब सिर्फ एक सामान्य स्काला आईओ ऑब्जेक्ट है, ताकि आप इसके साथ कुछ भी कर सकें, जैसे कि सामग्री पढ़ना और परीक्षण डेटा का उपयोग करना।

संसाधन प्राप्त करने के लिए अन्य तरीके भी हैं (उदाहरण के लिए एक धारा के रूप में)। अधिक जानकारी के getResourceलिए जावा डॉक्स: क्लास के तरीकों को देखें ।


8
मुझे getClassLoaderनिर्देश में जोड़ना था । परिणाम थाSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))
मोएबियस

1
पुष्टि की गई Moebius टिप्पणी getClassLoaderकी आवश्यकता है। इसके बिना पथ में परीक्षण वर्ग की श्रेणी पदानुक्रम निर्देशिका शामिल है। कुछ इस तरह ~/lighthouse/target/scala-2.12/test-classes/com/mycompany/myapp/module1/utils/blabla/। का उपयोग करते हुए getClass.getClassLoader.getResource()भाग com/mycompany/myapp/module1/utils/blabla/निकाल दिया जाता है
पोलीमरेज़

28

एक अन्य विकल्प (खासकर यदि आपको संसाधन को एक्सेस करने की आवश्यकता है File); इसके माध्यम से रास्ता प्राप्त करना है:

val path = getClass.getResource("/testData.txt").getPath
val file = new File(path)

जैसा कि स्कैला में बताया गया है कि संसाधन फ़ोल्डर में फ़ाइल का फ़ाइल पथ प्राप्त करें


24

sbt से फाइल कॉपी करता src/test/resourcesहै target/scala-[scalaVersion]/test-classes

आप अपने परीक्षणों में संसाधनों का उपयोग इस प्रकार कर सकते हैं:

Source.fromURL(getClass.getResource("/testData.txt"))

यह मान लेता है कि testData.txtसीधे फ़ोल्डर के नीचे था src/test/resources। कोई उपनिर्देशिका जोड़ें, अन्यथा।


0

और उन मामलों में जहां Google अमरूद आमतौर पर getClass.getResourceकाम नहीं करता है (न ही पता है कि कब या क्यों वास्तव में परवाह है)com.google.common.io.Resources.getResource

testCompile "com.google.guava:guava:18.0"

-4

यह जानने के लिए कि परीक्षण के दौरान आप फ़ाइल सिस्टम में कहां हैं, आप डमी टेस्ट में ऐसा कुछ कर सकते हैं:

 import scala.collection.JavaConversions._
  for(file <- new File(".").listFiles ){
   println(file.getAbsolutePath)
  }

फिर, जब आप अपना रास्ता जानते हैं, तो अपने परीक्षण में आप इसका उपयोग कर सकते हैं:

new File("./src/test/resources/yourfile.xml")

के तहत फ़ाइलें src/test/resourcesपरीक्षण की कक्षा में हैं इसलिए परीक्षण बिल्ड निर्देशिका संरचना के बारे में पता किए बिना कोड तक पहुंच सकते हैं।
जसेक लाकोवस्की

2
हालांकि यह उपयोगी हो सकता है, अगर किसी को संसाधनों की गणना करने की आवश्यकता है (यानी कोड में उनके नाम तय नहीं हैं, लेकिन वहां रखी गई किसी भी फाइल का उपयोग करेंगे)।
एकुप्पि


जब आप अपने ऐप को मोटे जार के रूप में तैनात करते हैं तो यह आपको परेशानी में डाल देगा
एलेक्स मोनासस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.