Scala 斯卡拉“;未找到:type";错误
我是scala noob,我正在为scala spark程序编写单元测试用例。当我尝试使用Scala 斯卡拉“;未找到:type";错误,scala,intellij-idea,sbt,Scala,Intellij Idea,Sbt,我是scala noob,我正在为scala spark程序编写单元测试用例。当我尝试使用sbt test命令运行scala单元测试用例时,我得到以下错误 BasicACRStatsTest.scala:8: not found: type BasicACRStats [error] var basicStats: BasicACRStats = _ [error] ^ BasicACRStatsTest.scala:14: not found: typ
sbt test
命令运行scala单元测试用例时,我得到以下错误
BasicACRStatsTest.scala:8: not found: type BasicACRStats
[error] var basicStats: BasicACRStats = _
[error] ^
BasicACRStatsTest.scala:14: not found: type BasicACRStats
[error] basicStats = new BasicACRStats
[error] ^
[error] two errors found
[error] (test:compile) Compilation failed
我正在使用intellij,当我试图引用类BasicACRStats
时,它显示无法解析符号BasicACRStats
,即使我在正确的包中声明了它
巴斯卡斯塔斯卡拉酒店
package com.company.analytics
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.{FileSystem, Path}
import org.apache.hadoop.fs.FileSystem.Statistics
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql.hive.HiveContext
import scala.collection.mutable.ArrayBuffer
import collection.mutable
object BasicACRStats {
def main(args: Array[String]) {
// Some code goes here
}
}
基本状态
import com.company.analytics
import org.scalatest.FunSuite
import org.scalatest.BeforeAndAfter
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
class BasicACRStatsTest extends FunSuite with BeforeAndAfter {
@transient var sc: SparkContext = _
var basicStats: BasicACRStats = _
// some code goes here
}
Simple.sbt
name := "basicACRStats"
version := "1.0"
scalaVersion := "2.10.4"
libraryDependencies += "org.apache.spark" %% "spark-core" % "1.2.0"
libraryDependencies += "org.apache.spark" % "spark-sql_2.10" % "1.1.0"
libraryDependencies += "org.apache.spark" % "spark-hive_2.10" % "1.1.0"
libraryDependencies += "org.scalatest" % "scalatest_2.10" % "1.9.1" % "test"
项目目录结构
projectfoo
.idea
src
main
scala
com
company
analytics
BasicACRStats.scala
test
scala
BasicACRStatTest.scala
target
simple.sbt
我不确定如何解决此问题,请与我分享您的想法,如果您需要更多信息,请告诉我。
BasicACRStats
似乎是示例代码中的对象,而不是类
对象是单例而不是类/类型。我有一个类型,在本例中是BasicACRStats.type
,它只有一个实例。因为它不是一个类型,所以调用newbasicacrstats
是无效的Scala,也没有尝试将其用作值的类型
您可能需要声明BasicACRStats
一个类。这将使示例代码的其余部分变得有意义。您需要在测试的顶部导入com.company.analytics.
。简单地导入包是没有帮助的。我试图在测试用例的顶部添加上面的行,但仍然没有成功。当我运行测试时,它显示了相同的错误。感谢您指出scala中对象
和类
关键字之间的区别。但是,当我将其更改为class BasicACRStats
时,我收到以下错误消息[error]无法运行test basicacrstatest:java.lang.IllegalArgumentException:unrecogned argument:-cp
我想知道是否可以在Scala中测试主类。如何测试是否为args
数组的命令行scala程序提供了正确数量的参数,并检查是否将正确的错误消息打印到控制台?调用main方法很简单,它只是一个接受数组[String]的方法,检查副作用,例如打印到控制台的内容,如果可能的话,非常困难。您通常会做的是将逻辑提取到其他地方干净的可测试函数/类中,测试它们,然后在主方法中使用它们。感谢您的解释,我现在可以使用Spark运行scala测试了。我还重构了代码,这样我就不需要测试主类了。一旦我将主类BasicACRStats
更改为object并在命令行上运行sbt test
,我就能够对main
中使用的所有类运行单元测试。