2015-11-16 44 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