web-dev-qa-db-ja.com

テストリソースにアクセスする方法

data.xmlsrc/test/resources/というファイルがあります。

そのファイルをテストの新しいFileReaderdata.scalasrc/test/scala/に読み込むにはどうすればよいですか?

131
Aaron Yodaiken

リソースは、Javaが提供する特別な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は通常のScala IOオブジェクトであるため、コンテンツの読み取りやテストデータでの使用など、必要な処理を実行できます。

リソースを取得する他の方法(ストリームなど)もあります。詳細については、 Java Docs:ClassgetResourceメソッドを参照してください。

191
Mitchell

別の代替手段(特にFileとしてリソースにアクセスする必要がある場合);次の方法でパスを取得します。

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

で指摘されているように、Scalaはリソースフォルダ内のファイルのファイルパスを取得します

24
Neil

sbtはsrc/test/resourcesからtarget/scala-[scalaVersion]/test-classesにファイルをコピーします。

次のように、テストのリソースにアクセスできます。

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

testData.txtがフォルダーsrc/test/resourcesの直下にあると想定しています。それ以外の場合は、サブディレクトリを追加します。

22
Nick A Miller

また、getClass.getResourceが機能しない場合(いつ、なぜ正確にわからないか気にしないでください)、Google Guavaのcom.google.common.io.Resources.getResourceは通常機能します

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