Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 斯卡拉“;未找到:type";错误_Scala_Intellij Idea_Sbt - Fatal编程技术网

Scala 斯卡拉“;未找到:type";错误

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

我是scala noob,我正在为scala spark程序编写单元测试用例。当我尝试使用
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
中使用的所有类运行单元测试。