2011-03-12 116 views

回答

158

資源旨在使用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現在只是一個普通的斯卡拉IO對象,所以你可以做你想做的事情任何東西,喜歡看書內容並將其用於測試數據。

還有其他方法來獲取資源(例如作爲流)。有關更多信息,請參閱Java Docs: Class上的getResource方法。

+2

我不得不在指令中添加一個'getClassLoader'。結果是'Source.fromURL(getClass.getClassLoader.getResource(「simulation.json」))' – Moebius 2017-01-12 17:30:50

17

sbt將文件從src/test/resources複製到target/scala-[scalaVersion]/test-classes

您可以在您的測試訪問的資源如下:

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

,它假定testData.txt是直接在文件夾src/test/resources下。添加任何子目錄,否則。

-3

要知道你在哪裏測試期間在文件系統中,你可以做這樣的事情在一個虛擬的測試:

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

然後,當你知道你的路,你的測試,你可以使用它作爲:

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

'src/test/resources'下的文件在測試的CLASSPATH中,因此測試可以在代碼沒有意識到構建的情況下訪問它目錄結構。 – 2014-07-27 11:02:22

+2

如果需要枚舉資源(即代碼沒有固定名稱,但會使用放置在其下的任何文件),這可能會很有用。 – akauppi 2015-01-23 12:53:45

+0

@akauppi這可以通過http://docs.spring.io/spring-framework/docs/2.5.x/api/org/springframework/core/io/support/PathMatchingResourcePatternResolver.html完成 – dk14 2016-08-13 18:50:53

0

而在情況下getClass.getResource不工作(不知道也不關心何時或到底爲什麼)所指出的

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

com.google.common.io.Resources.getResource通常是

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