답변:
자원은 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
이제는 일반적인 스칼라 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)
스칼라 에서 지적했듯이 리소스 폴더에서 파일의 파일 경로를 가져옵니다.
테스트 중에 파일 시스템의 위치를 알기 위해 더미 테스트에서 다음과 같은 작업을 수행 할 수 있습니다.
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"))