İçinde bir dosya data.xmlvar src/test/resources/.
Nasıl yeni içine bu dosyayı okuyabilir FileReaderbenim testinde data.scalade src/test/scala/?
İçinde bir dosya data.xmlvar src/test/resources/.
Nasıl yeni içine bu dosyayı okuyabilir FileReaderbenim testinde data.scalade src/test/scala/?
Yanıtlar:
Kaynaklara getResourceJava'nın sağladığı özel stil yöntemleri kullanılarak erişilmesi amaçlanmıştır . Sizin örneğe göre data.xmlolmak $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 sourceartı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 getResourceiçin Java Docs: Class'taki yöntemlere bakın .
getClassLoadergerekiyor. 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/resourcesile arasındaki dosyaları kopyalar target/scala-[scalaVersion]/test-classes.
Testlerinizdeki kaynaklara aşağıdaki gibi erişebilirsiniz:
Source.fromURL(getClass.getResource("/testData.txt"))
testData.txtDoğ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/resourcestestin 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"))