回答:
リソースは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 Docs:Classのメソッドを参照してください。
getClassLoader
が必要です。これがない場合、パスにはテストクラスのクラス階層ディレクトリが含まれます。のようなもの ~/lighthouse/target/scala-2.12/test-classes/com/mycompany/myapp/module1/utils/blabla/
。getClass.getClassLoader.getResource()
部分の使用com/mycompany/myapp/module1/utils/blabla/
は削除されました
別の方法(特に、リソースとしてリソースにアクセスする必要がある場合) File
)。それを経由してパスを取得することです:
val path = getClass.getResource("/testData.txt").getPath
val file = new File(path)
Scalaで指摘されているように、リソースフォルダー内のファイルのファイルパスを取得する
テスト中にファイルシステムのどこにいるかを知るには、ダミーテストで次のようにします。
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"))