[scala] 스칼라의 테스트 리소스에 액세스하는 방법?

에 파일 data.xmlsrc/test/resources/있습니다.

FileReader내 테스트 data.scala에서 해당 파일을 새 파일로 어떻게 읽을 수 src/test/scala/있습니까?



답변

자원은 getResourceJava가 제공 하는 특수 스타일 메소드를 사용하여 액세스 해야합니다. 당신의 예를 감안할 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이제는 일반적인 스칼라 IO 객체이므로 내용을 읽고 테스트 데이터로 사용하는 등 원하는 모든 작업을 수행 할 수 있습니다.

리소스를 얻는 다른 방법 (예 : 스트림)도 있습니다. 자세한 정보 getResourceJava Docs : Class 의 메소드 를 참조하십시오 .


답변

다른 대안 (특히으로 리소스에 액세스해야하는 경우 File); 경로를 통해 얻는 것입니다 :

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

스칼라 에서 지적했듯이 리소스 폴더에서 파일의 파일 경로를 가져옵니다.


답변

sbt는에서 src/test/resources로 파일을 복사합니다 target/scala-[scalaVersion]/test-classes.

다음과 같이 테스트의 리소스에 액세스 할 수 있습니다.

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

testData.txt폴더 바로 아래에 있다고 가정 합니다 src/test/resources. 그렇지 않으면 하위 디렉토리를 추가하십시오.


답변

그리고 Google Guava에서 getClass.getResource작동하지 않는 경우 (정확한시기 또는 이유를 정확히 알지 못하거나 걱정하지 않는 경우)com.google.common.io.Resources.getResource

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


답변

테스트 중에 파일 시스템의 위치를 ​​알기 위해 더미 테스트에서 다음과 같은 작업을 수행 할 수 있습니다.

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

그런 다음 경로를 알면 테스트에서 다음과 같이 사용할 수 있습니다.

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


답변