2015-11-16 49 views
1

Scala的測試我的SBT項目的價值是佈局標準:SBT測試文件無法找到SRC文件

sbt-example 
    build.sbt 
    src/main/scala/local/search/BinarySearch.scala 
    src/main/scala/local/util/Utility.scala 
    src/test/scala/local/search/SearchingSuite.scala 

我build.sbt很簡單:

name := "helloworld" 
version := "1.0" 
scalaVersion := "2.11.7" 

libraryDependencies ++= Seq(
    "org.scalatest" %% "scalatest" % "2.2.4" 
) 

我BinarySearch.scala看起來像:

package local.search 

object BinarySearch { 
    // def ... 
} 

我SearchingSuite.scala樣子:

package local.search 

import org.scalatest.FunSuite 

class SearchingSuite extends FunSuite{ 
    // call functions from BinarySearch object 
} 

運行的命令是:

sbt compile 
sbt "test-only local.search.SearchingSuite" 

然後SBT引發錯誤:

​​

這有什麼錯我的代碼?如果我需要使用Utility.scala中的某個對象,如何導入SearchingSuite.scala?

謝謝,會投票與任何答案!

回答

0

假設您正在研究A類;而A類需要B類。只要A和B屬於兩個不同的包,就必須導入B類。

在你的情況下,SearchingSuite和BinarySearch屬於兩個不同的包。特別是前者屬於主要包源碼包,後者屬於測試源碼包。因此,您必須在SearchingSuite中導入BinarySearch。否則,會出現像您遇到的編譯錯誤。

要使用一些對象從實用,你

進口local.util.Utility

如果實用程序是一個類或

進口local.util.Utility._

if Utility是一個對象。

如果您正在使用某些IDE,如Intellij或Eclipse,請右鍵單擊錯誤突出顯示,IDE將彈出一些建議。

+0

嗨,謝謝。但我只是在測試文件中添加「import local.search.BinarySearch」,它表示「對象BinarySearch不是package local.search的成員」。我想我需要使用完整的軟件包名稱?什麼是完整的軟件包名稱? – jamesvoncarter

+0

你應該把你的代碼推到github上,這樣我們就可以更容易地看一眼並幫助你。 –

+0

謝謝,我真的想通了。 BinarySearch對象在與SearchingSuite相同的包中聲明,因此不需要導入。這個錯誤來自sbt的奇怪行爲:有時如果你沒有完全刪除文件(把它們放在回收站裏面並不是「完整的」),sbt仍在調查那個「鬼魂」文件。我的項目在https://github.com/jz33/Spark-Standalone-Mllib-Test-Suites – jamesvoncarter