2015-02-27 9 views
1

Я scala noob, и я работаю над написанием блок-тестов для программы искры Scala. Когда я пытаюсь запустить мой тест Scala блока случае использования sbt test команды, я получаю следующее сообщение об ошибкеScala «not found: type» error

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 он показывает Cannot resolve symbol BasicACRStats хотя я заявил в правильный пакет.

BasicACRStat.scala

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 
    } 
} 

BasicACRStatsTest.scala

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" 

Структура Directory Project

projectfoo 
    .idea 
    src 
    main 
     scala 
     com 
      company 
      analytics 
       BasicACRStats.scala 
    test 
     scala 
     BasicACRStatTest.scala 
    target 
    simple.sbt 

Я не уверен, как устранить эту проблему, пожалуйста, поделитесь своими мыслями и, пожалуйста, дайте мне знать, если вам потребуется дополнительная информация.

+1

Вам нужно «импортировать com.company.analytics._' в верхней части вашего теста. Просто импортировать пакет не поможет. – millhouse

+0

Я попытался добавить вышеприведенную строку в верхней части моего тестового примера и до сих пор не повезло. Он показывает ту же ошибку, когда я запускаю тест. – BarryVenom

ответ

1

BasicACRStats, как представляется, object в вашем примере кода, а не class.

Объект является одноэлементным, а не классом/типом. I имеет a тип, в данном случае BasicACRStats.type, что есть только один экземпляр когда-либо. Поскольку это не тип, то вызов new BasicACRStats недействителен Scala и ни один не пытается использовать его как тип для значения.

Возможно, вы хотите объявить класс BasicACRStats. Это сделало бы остальную часть вашего образца кода понятным.

+0

Спасибо, что указали разницу между ключевыми словами 'object' и' class' в scala. Однако, когда я изменил его на 'class BasicACRStats', я получил следующее сообщение об ошибке' [error] Не удалось запустить test BasicACRStatsTest: java.lang.IllegalArgumentException: Неопознанный аргумент: -cp' – BarryVenom

+0

Я хотел бы знать, возможно ли это для тестирования основного класса в Scala. Как можно проверить, правильно ли аргумент командной строки командной строки для массива 'args' задан правильный аргумент аргумента, и проверить правильность вывода правильного сообщения об ошибке на консоль? – BarryVenom

+0

Вызов основного метода прост, его просто метод, который принимает массив [String], проверяет побочные эффекты, такие как то, что напечатано на консоли, очень сложно, если это возможно вообще. То, что вы обычно делаете, это извлечь вашу логику в чистые проверяемые функции/классы где-то еще, протестировать их, а затем просто использовать их в своем основном методе. – johanandren