İçinde bir dosya data.xml
var src/test/resources/
.
Nasıl yeni içine bu dosyayı okuyabilir FileReader
benim testinde data.scala
de src/test/scala/
?
İçinde bir dosya data.xml
var src/test/resources/
.
Nasıl yeni içine bu dosyayı okuyabilir FileReader
benim testinde data.scala
de src/test/scala/
?
Yanıtlar:
Kaynaklara getResource
Java'nın sağladığı özel stil yöntemleri kullanılarak erişilmesi amaçlanmıştır . Sizin örneğe göre data.xml
olmak $SBT_PROJECT_HOME/src/test/resources/
, bunu böyle bir testte erişebilirsiniz:
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"))
Tabii ki bu source
artık sadece normal bir Scala IO nesnesi, böylece içeriği okumak ve test verileri için kullanmak gibi istediğiniz her şeyi yapabilirsiniz.
Kaynağı almanın başka yöntemleri de vardır (örneğin bir akış olarak). Daha fazla bilgi getResource
için Java Docs: Class'taki yöntemlere bakın .
getClassLoader
gerekiyor. Bu olmadan yol, test sınıfının sınıf hiyerarşi dizinini içerir. Gibi bir şey ~/lighthouse/target/scala-2.12/test-classes/com/mycompany/myapp/module1/utils/blabla/
. Kullanma getClass.getClassLoader.getResource()
kısmı com/mycompany/myapp/module1/utils/blabla/
çıkarılır
Başka bir alternatif (özellikle kaynağa a olarak erişmeniz gerekiyorsa File
); yolunu şu yolla elde etmektir:
val path = getClass.getResource("/testData.txt").getPath
val file = new File(path)
Scala'da işaret edildiği gibi, kaynaklar klasöründeki dosya yolunu al
sbt, src/test/resources
ile arasındaki dosyaları kopyalar target/scala-[scalaVersion]/test-classes
.
Testlerinizdeki kaynaklara aşağıdaki gibi erişebilirsiniz:
Source.fromURL(getClass.getResource("/testData.txt"))
testData.txt
Doğrudan klasörün altında olduğunu varsayar src/test/resources
. Aksi takdirde alt dizinleri ekleyin.
Test sırasında dosya sisteminde nerede olduğunuzu bilmek için, sahte bir testte böyle bir şey yapabilirsiniz:
import scala.collection.JavaConversions._
for(file <- new File(".").listFiles ){
println(file.getAbsolutePath)
}
Ardından, yolunuzu bildiğinizde, testinizde şu şekilde kullanabilirsiniz:
new File("./src/test/resources/yourfile.xml")
src/test/resources
testin CLASSPATH'ındadır, böylece testler kod derleme dizini yapısından haberdar olmadan ona erişebilir.
getClassLoader
. SonuçSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))